java面試題之select、poll和epoll的區別


 

消息傳遞方式:

select:內核需要將消息傳遞到用戶空間,需要內核的拷貝動作;

poll:同上;

epoll:通過內核和用戶空間共享一塊內存來實現,性能較高;

 

文件句柄劇增后帶來的IO效率問題:

select:因為每次調用都會對連接進行線性遍歷,所以隨着FD劇增后會造成遍歷速度的“線性下降”的性能問題;

poll:同上;

epoll:由於epoll是根據每個FD上的callable函數來實現的,只有活躍的socket才會主動調用callback,所以在活躍socket較少的情況下,使用epoll不會對性能產生線性下降的問題,如果所有socket都很活躍的情況下,可能會有性能問題;

 

支持一個進程所能打開的最大連接數:

select:單個進程所能打開的最大連接數,是由FD_SETSIZE宏定義的,其大小是32個整數大小(在32位的機器上,大小是3232,64位機器上FD_SETSIZE=3264),我們可以對其進行修改,然后重新編譯內核,但是性能無法保證,需要做進一步測試;

poll:本質上與select沒什么區別,但是他沒有最大連接數限制,他是基於鏈表來存儲的;

epoll:雖然連接數有上線,但是很大,1G內存的機器上可以打開10W左右的連接;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM