select、poll、epoll模型對比
先說select:
1.socket數量限制:該模式可操作的socket數由fd_setsize決定,核心預設32*32=1024.
2.操作限制:通過遍歷fd_setsize個socket來完成排程,不管哪個socket是活躍的,都遍歷一遍.
後說poll:
1.socket數量幾乎無限制:該模式下的socket對應的fd列表由乙個陣列來儲存,大小不限(預設4k).
2.操作限制:同select.
再說:epoll:
1.socket數量無限制:同poll
2.操作無限制:基於核心提供的反射模式,有活躍socket時,核心訪問該socket的callback,不需要遍歷輪詢.
總體來說:
大部分情況下,反射的效率都比遍歷來的高,但是!
但是當所有socket都活躍的時候,反射還會更高麼?這時候所有的callback都被喚醒,會導致資源的競爭.既然都是要處理所有的socket,那麼遍歷是最簡單最有效的實現方式.
舉例來說:
對於im伺服器,伺服器和伺服器之間都是長鏈結,但數量不多,一般一台60\70個,比如採用ice這種架構設計,但請求相當頻繁和密集,這時候通過反射喚醒callback不一定比用select 去遍歷處理更好.
對於web
的socket,這時候沒必要把全部的socket都遍 歷處理,因為那些等待超時的請求是大多數的,這樣用epoll會更好.
select poll epoll學習筆記
io多路復用,網路程式設計。io模型 阻塞式io模型 非阻塞式io模型,需要輪詢核心,較少使用 io復用模型,阻塞於select 訊號驅動式io模型 核心通知使用者程序何時可以啟動乙個io操作 非同步io模型 核心通知使用者程序操作何時完成。posix標準 可移植作業系統介面,ieee為各種在uni...
select poll epoll事件驅動
一直用select,沒有使用poll和epoll,近來需要使用epoll。以前面試時,有人問過我,我也簡單作答。現在寫一下我的理解。三者區別 select 監聽的檔案描述符有限制,linux系統預設是1024 poll 和select差不多,比select優越的地方是監聽的檔案描述符個數可以不限 e...
I O復用 select poll epoll區別
select 和poll的區別 select select的觸發方式是水平觸發 lt 應用程式如果沒有完成對乙個已經就緒的檔案描述符進行io操作,那麼之後每次select呼叫還是會將這些檔案描述符通知程序。建立陣列,儲存描述符 一次while 要做的事 清空集合fd zero 遍歷陣列,將fd寫入f...