两种核心触发模式
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)
-
工作方式:
-
仅在状态变化时通知一次(如从不可读变为可读)
-
即使数据未完全处理,后续不再通知,直到下次状态变化
-