redis之所以可以高效的執行命令,單執行緒每秒qps達到10w左右,是因為起io多路復用技術效率很高。
io多路復用解決了什麼問題?
沒有io多路復用,那麼當伺服器操作某乙個fd執行read的時候,如果fd對應的客戶端沒有執行寫操作,那麼服務端就會阻塞,這個時候客戶端2來了資料,服務端就沒辦法讀取了
那麼什麼是io多路復用呢?
io多路復用就是伺服器可以同時處理多個客戶端發來的請求(其實並不是同時,只是分時),但是很多的fd可以被乙個中介軟體解決(select poll 或者epoll),不需要服務端去阻塞讀(寫)了,這個任務交給了中介軟體,接下來講一下select poll epoll這三個中介軟體的區別
select 有最大socket限制1024,每次有事件,就會通知伺服器,去遍歷這個陣列,去判斷到底是哪個socket有資料,然後讀取,o n的時間複雜度
poll和select基一致,只是沒有1024的限制,用為fd用的是鍊錶實現的,有請求過來 處理的時間複雜度也是o n
epoll和select poll都不一樣,服務端可以在每個fd註冊乙個事件,當該fd有資料的時候,就會通知使用者空間,具體哪個fd有資料,可以讀取(寫入) o 1的時間複雜度
I O多路復用
一 五種i o模型 1 阻塞i o模型 最流行的i o模型是阻塞i o模型,預設情形下,所有套介面都是阻塞的。我們以資料報套介面為例來講解此模型 我們使用udp而不是tcp作為例子的原因在於就udp而言,資料準備好讀取的概念比較簡單 要麼整個資料報已經收到,要麼還沒有。然而對於tcp來說,諸如套介面...
i o多路復用
最常見的i o多路復用就是 select poll epoll了,下面說說他們的一些特點和區別吧。select 可讀 可寫 異常三種檔案描述符集的申明和初始化。fd set readfds,writefds,exceptionfds fd zero readfds fd zero writefds ...
I O多路復用
我們都知道unix like 世界裡,一切皆檔案,而檔案是什麼呢?檔案就是一串二進位製流而已,不管socket,還是fifo 管道 終端,對我們來說,一切都是檔案,一切都是流。在資訊 交換的過程中,我們都是對這些流進行資料的收發操作,簡稱為i o操作 input and output 往流中讀出資料...