select poll epoll模型對比

2022-08-28 11:30:13 字數 817 閱讀 7834

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...