高性能編程之IO複用之[select,poll,epoll]比較

綜述: 事件

三者的返回值都是就緒的文件描述符的數量 it

返回0表示沒有事件發生。 event

每次調用select前都須要重置fd集合。 file

 poll會修改pollfd結構體的revents參數,因此不用重置pollfd事件集。 select

因爲每次select和poll調用都返回整個用戶註冊的事件集合(包括就緒+未就緒) im

因此時間複雜度O(N). img

epoll每次都直接從內核事件表中取得用戶註冊的事件,無須反覆從用戶空間讀入這些事件。 集合

時間複雜度O(1). epoll

poll和epoll_wait分別用nfds和maxevents來指定最多監聽多少個文件描述符和事件。 文件

這兩個數值均可以達到系統最大值,65535 cat/proc/sys/fs/file-max

select和poll只能工做在相對低效的LT模式,而epoll能夠工做在ET模式。而且後者還支持EPOLLONESHOT事件。

select和poll採起輪詢的工做方式,epoll採用回調方式,適用於鏈接數量多,可是活動鏈接比較少的狀況。

~~~~~~~~~~~~~~~~

相關文章
相關標籤/搜索