天天看點

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則做了不必要的拷貝

繼續閱讀