Unix 網絡編程 select 與 epool 函數的區別

epool與select的區別:
select在一個進程中打開的最大fd是有限制的,由FD_SETSIZE設置,默認值是2048。不過 epoll則沒有這個限制,它所支持的fd上限是最大可以打開文件的數目,這個數字一般遠大於2048,一般來說內存越大,fd上限越大,1G內存都能達到大約10w左右。

select的輪詢機制是系統會去查找每個fd是否數據已準備好,當fd很多的時候,效率當然就直線下降了,epoll採用基於事件的通知方式,一旦某個fd數據就緒時,內核會採用類似callback的回調機制,迅速激活這個文件描述符,而不需要不斷的去輪詢查找就緒的描述符,這就是epool高效最本質的原因。

無論是select還是epoll都需要內核把FD消息通知給用戶空間,如何避免不必要的內存拷貝就很重要,在這點上,epoll是通過內核於用戶空間mmap同一塊內存實現的,而select則做了不必要的拷貝
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章