1. 程式人生 > >select,poll,epoll優缺點及比較

select,poll,epoll優缺點及比較

Linux中高階IO多路轉接中select、poll和epoll的優缺點,這裡主要談select和poll的缺點以及epoll的優點。

一、select的缺點:

1、編寫難度大

2、同時處理的檔案描述符是有上限的

3、每次需要重新設定fd集合

4、效能會隨使用者的增多而效率降低

5、輸入輸出引數在一起

二、poll的缺點

poll是對select的一種改良,最突出的改良有兩點:

1、檔案描述符數量沒有上限

2、將輸入輸出引數進行分離,不用每次設定

那麼poll的缺點是:

poll中監聽的檔案描述符數目增多時:

1、和select一樣,poll返回後,需要輪詢pollfd來獲取就緒的描述符

2、每次呼叫poll都需要大把大量客戶端在一時刻可能只有很少的處於就緒狀態,因此隨著監視的描述符數量的增長,其效率也會線性下降。

三、epoll的優點:

1、檔案描述符數目沒有上限:通過epoll_ctl()來註冊一個檔案描述符,核心中使用紅黑樹的資料結構來管理所有需要監控的檔案描述符。

2、基於事件就緒通知方式:一旦被監聽的某個檔案描述符就緒,核心會採用類似於callback的回撥機制,迅速啟用這個檔案描述符,這樣隨著檔案描述符數量的增加,也不會影響判定就緒的效能。

3、維護就緒佇列:當檔案描述符就緒,就會被放到核心中的一個就緒佇列中,這樣呼叫epoll_weit獲取就緒檔案描述符的時候,只要取佇列中的元素即可,操作的時間複雜度恆為O(1)。

4、關於有些地方說:epoll還有記憶體對映機制,即核心將就緒佇列通過mmap的方式對映到使用者態,避免了拷貝記憶體這樣的額外效能開銷。關於這一點,我並不認為這是epoll的優點,因為他和epoll底層工作方式相悖。mmap是一種共享記憶體,但是我們都知道共享記憶體中一旦有資料,使用者就能直接看到,並且使用,但是epoll_wait在取資料時傳入了一塊快取區這是和貢獻記憶體相悖的其一;其二是作業系統並不相信任何人,尤其是使用者,它不會讓使用者直接去取核心中的資料。
---------------------
作者:jgm20475
來源:CSDN
原文:https://blog.csdn.net/jgm20475/article/details/81083529
版權宣告:本文為博主原創文章,轉載請附上博文連結!