1、select的描述符大於FD_SETSIZE(1024)時會引起內存越界,poll和epoll不會,雖然連接數有上限,但是很大,1G內存的機器上可以打開10萬左右的連接,2G內存的機器可以打開20萬左右的連接
2、epoll是Linux所特有,而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減少複製開銷。