缺點:
1)、每次呼叫select,都需要把fd集合從使用者態拷貝到核心態,這個開銷在fd很多時會很大;
2)、同時每次呼叫select都需要在核心遍歷傳遞進來的所有fd,這個開銷在fd很多時也很大;
3)、單個程序可監視的fd數量被限制;
4)、對socket進行掃瞄是線性掃瞄;
優點:1)、select的可移植性更好,在某些unix系統上不支援poll()。
2)、select對於超時值提供了更好的精度:微秒,而poll是毫秒。
poll本質上和select沒有區別,它將使用者傳入的陣列拷貝到核心空間,然後查詢每個fd對應的裝置狀態,如果裝置就緒則在裝置等待對壘中加入一項繼續遍歷,如果遍歷完所有fd後沒有發現就緒裝置,則掛起當前程序,知道裝置就緒或者主動超時,被喚醒後它又要再次遍歷fd這個過程經理了多次無謂的遍歷。時間複雜度o(n)
缺點:1)、大量的fd的陣列被整體複製於使用者態和核心位址空間之間,而不管這樣的複製是不是有意義;
2)、與select一樣,poll返回後,需要輪詢pollfd來獲取就緒的描述符。
優點:1)、poll() 不要求開發者計算最大檔案描述符加一的大小。
2)、poll() 在應付大數目的檔案描述符的時候速度更快,相比於select。
3)、它沒有最大連線數的限制,原因是它是基於鍊錶來儲存的。
epoll可以理解為event poll,不同於忙輪詢和無差別輪詢,epoll會把哪個流發生了怎樣的i/o事件通知我們。所以我們說epoll實際上是事件驅動(每個事件關聯上fd)的,此時我們對這些流的操作都是有意義的。(複雜度降低到了o(1))
缺點:2)、相對select來說 還是用起來還是複雜了一些, 不過和iocp比起來 增加了一點點的複雜度卻基本上達到了iocp的併發量和效能, 而複雜度遠遠小於iocp
3)、 相對iocp來說 對多核/多執行緒的支援不夠好, 效能也因此在效能要求比較苛刻的情況下不如iocp.
優點:1)、io效率不隨fd數目增加而線性下降:epoll不存在這個問題,它只會對"活躍"的socket進行操作
2)、使用mmap加速核心與使用者空間的訊息傳遞:epoll通過核心和使用者空間共享一塊記憶體來實現的。
select, poll和epoll的區別
我只用過select select 最不能忍受的是乙個程序所開啟的fd是有一定限制的,由fd setsize設定,預設值是2048。對於那些需要支援的上萬連線數目的im伺服器來說顯然太少了,select要掃瞄各個檔案描述符,而epool採用mmap更高效 select 系統呼叫提供乙個機制來實現同步...
select poll和epoll的區別
select,poll,epoll都是io多路復用的機制。i o多路復用就通過一種機制,可以監視多個描述符,一旦某個描述符就緒 一般是讀就緒或者寫就緒 能夠通知程式進行相應的讀寫操作。select僅僅知道i o事件發生的檔案描述符的數量,但並不知道是哪幾個 1 時間複雜度 o n 2 優點 跨平台支...
select,poll和epoll的API複習筆記
環境 centos7 xshell 前言 select poll epoll 的區別一定要清楚 select 優點是跨平台,而poll相對其沒有1024檔案描述符的限制,共有的缺點是 1.每次監聽都需要將監聽的資訊從應用層拷貝到核心。2.返回變化的檔案描述符的個數,具體哪個檔案描述符變化需要遍歷。3...