前言
epoll是Linux下的一个多路复用API,当处理大并发的事件时,其性能远强于古老的poll和select。epoll可以工作在两种模式下,LT(水平触发)、ET(边缘触发),接下来将讨论这两种模式的区别。
一、ET和LT介绍
epoll 新增了一个事件宏 EPOLLET,表示边缘触发模式(Edge Trigger,ET),默认的模式是水平触发模式(Level Trigger,LT)。这两种模式的区别在于:
对于水平触发模式,一个事件只要有,就会一直触发。
对于边缘触发模式,只有一个事件从无到有才会触发。
这两个词汇来自电学术语,可以将 fd 就绪认为是高电平,未就绪认为是低电平。那么水平模式的触发条件是状态处于高电平,而边缘模式的触发条件是新来一次电信号将当前状态变为高电平,即:
水平模式触发条件
处于高电平状态
边缘模式触发条件
低电平 => 高电平
图示如下:
二、代码示例
1.LT模式(默认)
#include <stdio.h>
#include <unistd.h>
#include <sys/epoll.h>
#define MAX_SIZE 1024