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
版權宣告:本文為博主原創文章,轉載請附上博文連結!