select、poll和epoll

1、select的描述符大於FD_SETSIZE(1024)時會引起內存越界,poll和epoll不會,雖然連接數有上限,但是很大,1G內存的機器上可以打開10萬左右的連接,2G內存的機器可以打開20萬左右的連接

2、epollLinux所特有,而select則應該是POSIX所規定,一般操作系統均有實現,所以select支持的系統更多,可移植性更強。

3、select有支持處理信號阻塞和更高時間分辨率(納秒)的pselect

4、多線程中使用select和poll CPU使用率過高,因爲select遍歷檢測0-maxfd中的所有套接字,poll也是線性遍歷的方式而epoll只檢測設置的fd。

select適用於少量fd的情況

5、poll本質上和select沒有區別,但是它沒有最大連接數的限制,原因是它是基於鏈表來存儲的

5、select和poll需要將消息從內核傳遞到用戶空間,都需要內存拷貝,而epoll利用mmap()文件映射內存加速與內核空間的消息傳遞;即epoll使用mmap減少複製開銷。

發佈了43 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章