Linux的epoll使用LT+非阻塞IO和ET+非阻塞IO有效率上的區別嗎?

請看清楚。。都是非阻塞IO,這是否意味著他們的系統調用次數基本是一致的?那麼ET+非阻塞存在的意義是什麼呢?


沒有做過實際測試,從文檔的說明上來看,ET的效率更高,原因在於epoll的工作原理是為socket號設置了一個微型的callback。在ET模式下,socket從非就緒到就緒的狀態只會觸發一次,將事件放入epoll,然後callback被移除,到socket再次變回非就緒狀態前不需要做其他工作了;而LT需要維護一個觸發列表,在每次epoll的時候都重新把之前觸發了而未移除的列表重新加到epoll的結果里。

從應用的角度上,ET最大的好處是不需要經常調用modify方法修改等待的事件,直接將EPOLLIN和EPOLLOUT一次加入就可以,當寫滿緩衝區時會自動產生EPOLLOUT,而在下次寫滿之前不會再出現EPOLLOUT。這樣就省去了兩次modify的時間。


epoll的邊沿觸發模式(ET)真的比水平觸發模式(LT)快嗎?(當然LT模式也使用非阻塞IO,重點是要求ET模式下的代碼不能造成飢餓) - 編程


輪詢方式和等待中斷方式適用地點不同


推薦閱讀:

多線程下epoll如何保證event.data.ptr不成為野指針?
Android的界面組件不能被子線程訪問是什麼意思呢?
操作系統時間調度基本單位是內核線程還是進程?

TAG:編程 | Linux | 計算機網路 | epoll | 多線程 |