I/O多路轉接之epoll

epoll的工作原理:

epoll把用戶關心的文件描述符上的事件放在內核的一張事件表裏,所以不用像select那樣,每次都要重複傳入文件描述符。但epoll需要一個文件描述符來唯一標識內核中的這個事件表。這個文件描述符用函數epoll_create()來創建。

epoll_wait()函數在一段時間內等待文件描述符中的事件,成功返回就緒事件的個數,失敗返回-1。

epoll_ctl()函數用於事件註冊,註冊要監聽的事件類型。

代碼:




epoll有兩種工作模式:

LT:epoll的缺省工作方式,如果內核告訴你一個文件描述符就緒了,但是你不做任何操作,內核還是會繼續通知你的。所以,這種模式編程出錯誤可能性要小一點。

ET:高速的工作方式,當一個文件描述符就緒了,內核只會通知一次,當事件就緒後,如果這次沒有把這個事件對應的套接字緩衝區處理完,在這個套接字中新的事件再次到來時,在ET模式下無法再次從epoll_wait調用中獲取這個事件。而LT模式正好相反,只要一個事件對應的套接字緩衝區還有數據,就總能從epoll_wait中獲取這個事件。

------------------------------------------------------------------------------------------------------

select ,poll,epoll 之間的比較:


參考《Linux高性能服務器編程》


發佈了62 篇原創文章 · 獲贊 9 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章