IO多路復用機制:select、poll、epoll的區別


IO多路復用機制:select、poll、epoll的區別

1.單個進程打開的文件描述符(fd文件句柄)不一致

​ select :有最大連接數限制數為1024,單個進程所能打開的最大連接數由FD_ZETSIZE宏定義。

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

​ epoll:雖然連接有上限,但是很大,1G內存的機器可以打開10萬左右的連接,以此類推。

2.監聽Socket的方式不一致

select :輪詢的方式,一個一個的socket檢查過去,發現有socket活躍時才進行處理,當線性socket增多時,輪詢的速度將會變得很慢,造成線性造成性能下降問題。

poll:對select稍微進行了優化,只是修改了文件描述符,但是監聽socket的方式還是輪詢。

expoll:epoll內核中實現是根據每個fd上的callback函數來實現的,只有活躍的socket才會主動調用callback,通知expoll來處理這個socket。(會將連接的socket注冊到epoll中, 相當於socket的花名冊, 如果有一個socket活躍了, 會回調一個函數, 通知epoll,趕緊過來處理)

3.內存空間拷貝方式(消息傳遞方式)不一致

select:內核想將消息傳遞到用戶態,需要將數據從內核態拷貝到用戶態,這個過程非常的耗時

poll:同上

epoll:epoll的內核和用戶空間共享一塊內存,因此內存態數據和用戶態數據是共享的


免責聲明!

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



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