一直用select, 沒有使用poll和epoll, 近來需要使用epoll。以前面試時,有人問過我, 我也簡單作答。
現在寫一下我的理解。
三者區別:
select: 監聽的檔案描述符有限制,linux系統預設是1024
poll:和select差不多, 比select優越的地方是監聽的檔案描述符個數可以不限
epoll:
1) 監聽的檔案描述符個數不限
2) select/poll有事件時,會無差別遍歷所有檔案描述符,依次判斷是否有資料,複雜度為o(n); 而epoll 會把哪個流發生了怎樣的i/o事件通知我們,複雜度為o(1)
。顯然epoll優勢明顯。(具體用法google一下)
select/poll:
while true
} epoll:
while true
} 3) epoll 包含 et 和 lt兩種模式。lt模式是預設的。
lt模式和select/poll一致, 判斷fd是否readable/writeable。只要fd可讀或可寫,即觸發事件
et模式, 只有fd變化時,才觸發事件。故資料要一次讀/寫完才行。
ps : select /poll 可用於阻塞/非阻塞io
epoll : lt模式和 select/poll一致, 但et模式只能用於非阻塞io
select poll epoll學習筆記
io多路復用,網路程式設計。io模型 阻塞式io模型 非阻塞式io模型,需要輪詢核心,較少使用 io復用模型,阻塞於select 訊號驅動式io模型 核心通知使用者程序何時可以啟動乙個io操作 非同步io模型 核心通知使用者程序操作何時完成。posix標準 可移植作業系統介面,ieee為各種在uni...
select poll epoll模型對比
select poll epoll模型對比 先說select 1.socket數量限制 該模式可操作的socket數由fd setsize決定,核心預設32 32 1024.2.操作限制 通過遍歷fd setsize個socket來完成排程,不管哪個socket是活躍的,都遍歷一遍.後說poll 1...
I O復用 select poll epoll區別
select 和poll的區別 select select的觸發方式是水平觸發 lt 應用程式如果沒有完成對乙個已經就緒的檔案描述符進行io操作,那麼之後每次select呼叫還是會將這些檔案描述符通知程序。建立陣列,儲存描述符 一次while 要做的事 清空集合fd zero 遍歷陣列,將fd寫入f...