linux poll機制

select模型:

調用select函數之後會一直監視這些文件描述符中有哪些可讀,如果有可讀的描述符那麼我們的工作進程就去讀取資源。

poll模型:

poll 和 select 的實現非常類似,本質上的區別就是存放 fd 集合的數據結構不一樣。select 在一個進程內可以維持最多 1024 個連接,poll 在此基礎上做了加強,可以維持任意數量的連接。

但 select 和 poll 方式有一個很大的問題就是,我們不難看出來 select 是通過輪訓的方式來查找是否可讀或者可寫,打個比方,如果同時有100萬個連接都沒有斷開,而只有一個客戶端發送了數據,所以這裡它還是需要循環這麼多次,造成資源浪費。

epoll模型:

epoll 是 select 和 poll 的增強版,epoll 同 poll 一樣,文件描述符數量無限制。

epoll是基於內核的反射機制,在有活躍的 socket 時,系統會調用我們提前設置的回調函數。而 poll 和 select 都是遍歷。


linux poll機制


linux poll機制


linux poll機制


linux poll機制


linux poll機制



分享到:


相關文章: