消息傳遞方式:
select:內核需要將消息傳遞到用戶空間,需要內核的拷貝動作;
poll:同上;
epoll:通過內核和用戶空間共享一塊內存來實現,性能較高;
文件句柄劇增后帶來的IO效率問題:
poll:同上;
epoll:由於epoll是根據每個FD上的callable函數來實現的,只有活躍的socket才會主動調用callback,所以在活躍socket較少的情況下,使用epoll不會對性能產生線性下降的問題,如果所有socket都很活躍的情況下,可能會有性能問題;
支持一個進程所能打開的最大連接數:
select:單個進程所能打開的最大連接數,是由FD_SETSIZE宏定義的,其大小是32個整數大小(在32位的機器上,大小是3232,64位機器上FD_SETSIZE=3264),我們可以對其進行修改,然后重新編譯內核,但是性能無法保證,需要做進一步測試;
poll:本質上與select沒什么區別,但是他沒有最大連接數限制,他是基於鏈表來存儲的;