一 原理概述
1 概念和原理
LT 模式(Level Triggered) LT 模式是 epoll 的默认模式。在 LT 模式下,当某个文件描述符就绪时,epoll_wait 函数会立即返回,通知应用程序有事件发生。即使应用程序没有立即处理完这些事件,下次调用 epoll_wait 时仍会再次返回这些就绪的文件描述符。
ET 模式(Edge Triggered) ET 模式要求应用程序在处理文件描述符的就绪事件时,必须确保将其处理完毕,否则 epoll_wait 将不会重复通知该文件描述符的就绪状态。ET 模式通过设置 epoll_event 结构体中的 EPOLLET 标志来启用。
2 区别
通知机制:
LT 模式:每当文件描述符就绪时,epoll_wait 将通知应用程序,即使应用程序没有处理完该事件。 ET 模式:只有在文件描述符状态发生变化时,epoll_wait 才会通知应用程序。如果应用程序没有处理完事件,将不会重复通知该文件描述符的就绪状态。
效率:
LT 模式:由于每次文件描述符就绪时都会通知应用程序,因此可能会引起频繁的上下文切换,影响效率。 ET 模式:只在状态变化时通知应用程序,可以减少不必要的上下文切换,提高效率,特别适合处理大量事件和高并发的场景。
3 适用场景
LT 模式适用场景:
对实时性要求不是非常高的应用,例如普通的网络服务器或者需要周期性处理数据的情况。 适合处理一般的数据读取、写入等操作。
ET 模式适用场景:
对事件响应速度要求较高的应用,例如高性能网络服务器,需要快速处理大量连接或数据的情况。 适合处理大数据流、高并发请求等场景,可以减少因为频繁通知而引起的性能开