epoll
的水平触发(Level Triggered, LT)和边缘触发(Edge Triggered, ET)是两种不同的事件通知机制,它们定义了 epoll
如何向应用程序报告文件描述符上的事件。理解这两种模式的差异对于使用 epoll
处理并发网络连接是很重要的。
水平触发(LT)
在水平触发模式下,只要满足条件的事件仍然存在,epoll
就会重复通知这个事件。比如,如果一个文件描述符上有可读数据,那么只要没有读完,epoll_wait
就会不断报告该文件描述符是可读的。这种模式的特点是:
- 容错性较好,不易丢失事件。
- 更易于编程和理解。
- 可以用于多线程程序中,多个线程可以共享同一个
epoll
文件描述符。
边缘触发(ET)
边缘触发模式下,事件只在状态变化时被通知一次,之后即使条件仍然满足,也不会再次通知,直到状态再次发生变化。例如,只有当新数据到达使得文件描述符从非可读变为可读时,epoll_wait
才会报告可读事件。边缘触发模式的特点是:
- 效率更高,因为它减少了事件的重复通知。
- 需要更加小心地处理每次通知,确保处理所有的数据,否则可能会丢失未处理完的数据。
- 更适合单线程或者每个线程使用独立
epoll
文件描述符的场景。
代码示例(不能运行单纯例子)
//下面是使用 e