ET和LT的区别

概念

ET(边沿触发)和LT(电平触发)是 epoll对文件描述符的两种操作。

LT的工作模式:当文件描述符上的事件就绪后,如果事务没有处理完成或者没有处理,那么下一次epoll会提醒应用程序。

ET的工作模式:当文件描述符上的事件就绪后,如果事务没有处理完成或者没有处理,那么下一次epoll则不会提醒应用程序,这就要求我们的应用程序在收到一次提醒后,必须将当下的数据处理完成。

内核实现

 

LT和ET的非阻塞模式

LT是阻塞与非阻塞模式二者皆可的,而ET模式需要采用阻塞模式,造成这样差别的原因与socket有关。

下面这一段来自于:https://blog.csdn.net/liuxuejiang158blog/article/details/12290725解释了原因。

二者的差异在于level-trigger模式下只要某个socket处于readable/writable状态,无论什么时候进行epoll_wait都会返回该socket;而edge-trigger模式下只有某个socket从unreadable变为readable或从unwritable变为writable时,epoll_wait才会返回该socket。在epoll的ET模式下,正确的读写方式为:读:只要可读,就一直读,直到返回0,或者 errno = EAGAIN;写:只要可写,就一直写,直到数据发送完,或者 errno = EAGAIN

也就是说,ET模式是在不可读写变化到可读写的时候,才会触发。
 

你可能感兴趣的:(ET和LT的区别)