LT和ET的区别?

LT(Level-Triggered)和 ET(Edge-Triggered)是 epoll 中用来设置事件触发方式的两种模式。

在 LT 模式下,当 epoll_wait() 检测到文件描述符就绪时,会将该事件加入就绪队列中,然后等待下一次 epoll_wait() 调用,即每次只要文件描述符处于可读/可写状态,就会触发 epoll_wait()。

而在 ET 模式下,当文件描述符状态发生变化时才会触发 epoll_wait(),即只有在文件描述符状态发生变化的瞬间才会触发一次事件,之后 epoll_wait() 将会阻塞等待下一次事件的发生。换言之,ET 模式只有在文件描述符状态从未就绪变为就绪时才会触发一次事件,而在就绪状态中持续触发事件。

因此,ET 模式需要对文件描述符进行非阻塞读写操作,以避免 epoll_wait() 的阻塞。另外,在 ET 模式下,需要将文件描述符设置为非阻塞模式,并要求一次性将所有数据读取完毕,否则可能会导致事件无法触发。

总之,LT 模式是默认模式,适用于大多数情况;ET 模式需要更为精细的处理,可以提高性能,但需要特别注意数据读取的方式。

版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《LT和ET的区别?》
文章链接:https://zhuji.vsping.com/4830.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。