epoll水平模式与边缘模式的区别
在 epoll 中,水平触发(Level-Triggered,LT)和边缘触发(Edge-Triggered,ET)是两种不同的事件触发模式。它们的区别在于:
水平触发模式(LT):当被监听的文件描述符上有可读或可写事件发生时,每次 epoll_wait() 调用都会返回该文件描述符上的就绪事件。如果应用程序没有立即处理该事件,下次 epoll_wait() 调用时仍会返回该事件。也就是说,如果该文件描述符上一直有事件没有被处理,epoll_wait() 将会一直返回该文件描述符上的事件,直到应用程序处理了该事件。
边缘触发模式(ET):当被监听的文件描述符上有可读或可写事件发生时,只有在该文件描述符状态发生变化时,epoll_wait() 才会返回该事件。也就是说,如果该文件描述符上有事件未被处理,下次 epoll_wait() 只会在该文件描述符状态发生变化时返回该事件,而不是在每次调用 epoll_wait() 时都返回该事件。
总之,水平触发模式适合于使用阻塞 I/O 的情况,而边缘触发模式适合于使用非阻塞 I/O 和基于事件驱动的编程模型。边缘触发模式对应的处理方式更加高效,但对编程模型的要求也更高。