java  nio 多路複用系統調用函數

select比epoll效率差的原因:select是輪詢,epoll是觸發式的,所以效率高。

Select:

1.Socket數量限制:該模式可操作的Socket數由FD_SETSIZE決定,內核默認32*32=1024.

2.操作限制:通過遍歷FD_SETSIZE(1024)個Socket來完成調度,不管哪個Socket是活躍的,都遍歷一遍.

Poll:

1.Socket數量幾乎無限制:該模式下的Socket對應的fd列表由一個數組來保存,大小不限(默認4k).

2.操作限制:同Select.

Epoll:

1.Socket數量無限制:同Poll

2.操作無限制:基於內核提供的反射模式,有活躍Socket時,內核訪問該Socket的callback,不需要遍歷輪詢.但是當所有Socket都活躍的時候,這時候所有的callback都被喚醒,會導致資源的競爭.既然都是要處理所有的Socket,那麼遍歷是最簡單最有效的實現方式.

而在java NIO中主要是有selector觸發調用系統函數而實現這種多路複用機制

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章