一、epoll ET与LT模式详解
1、ET与LT介绍
EPOLLET,就是边缘触发模式(Edge Trigger,ET),而默认的模式称为水平触发模式(Level Trigger,LT),区别在于:
- 水平触发模式,一个事件只要有,就会一直触发
- 边缘触发模式,只有一个事件从无到有才会触发
下面以fd的读写事件为例,介绍这两种工作模式,如下:
场景一:fd读事件触发条件
水平模式:
1)fd上无数据 => fd上有数据
2)fd处于有数据状态
边缘模式:
1)fd上无数据 => fd上有数据
2)fd又新来一次数据
场景二:fd写事件触发条件
水平模式:
1)fd一直处于可写状态
2)fd不可写 => fd可写
边缘触发:
1)fd不可写 => fd可写
2)fd可以写的空间发生变化
2、通过Demo讲解ET与LT的差异
程序一:监听读事件,并分别设置成ET与LT模式
#include <stdio.h>
#include <unistd.h>
#include <sys/epoll.h>
int main(void)
{
int epfd, nfds;
struct epoll_event ev, events[5]; // ev用于注册事件,数组用于返回要处理的事件
epfd = epoll_create(1); // 只需要监听一个描述符——标准输入
ev.data.fd = STDOUT_FILENO;
ev.events = EPOLLIN | EPOLLET; // 监听读状态同时设置ET模式
epoll_ctl(epfd, EPOLL_CTL_ADD, STDOUT_FILENO, &ev); // 注册epoll事件
for (;;) {
nfds = epoll_wait(epfd, events, 5, -1);
for (int i

文章详细介绍了Linux中epoll的ET(边缘触发)和LT(水平触发)两种模式的工作原理,通过示例程序展示了它们在读写事件处理上的差异。ET模式在有状态变化时触发,效率高但易丢失事件;LT模式在事件存在时持续触发,对编程要求较低。
最低0.47元/天 解锁文章
1274






