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高性能服務器編程》