兩種核心觸發模式
1. 水平觸發 (Level-Triggered, LT)
-
工作方式:
-
當文件描述符處于就緒狀態時,epoll 會持續通知
-
只要狀態未改變,每次調用
epoll_wait
都會返回該描述符
-
-
特點:
c
// 內核處理邏輯 (ep_send_events_proc) if (!(epi->event.events & EPOLLET)) { // LT 模式list_add_tail(&epi->rdllink, &ep->rdllist); // 重新加入就緒列表 }
-
編程模型簡單,不易遺漏事件
-
允許部分處理數據(如只讀取部分內容)
-
可能多次通知同一事件,增加系統開銷
-
2. 邊緣觸發 (Edge-Triggered, ET)
-
工作方式:
-
僅在狀態變化時通知一次(如從不可讀變為可讀)
-
即使數據未完全處理,后續不再通知,直到下次狀態變化
-