epoll的边缘触发和水平触发
epoll的边缘触发和水平触发
epoll
是 Linux 下用于处理大量文件描述符的高效 I/O 多路复用机制。在 epoll
中,有两种触发模式:水平触发(Level-Triggered,简称 LT)和边缘触发(Edge-Triggered,简称 ET)。
- 水平触发(LT,Level-Triggered):
- 当文件描述符就绪时,
epoll_wait
将立即返回。 - 如果文件描述符的状态发生变化,
epoll_wait
会再次通知应用程序。 - 这种模式下,如果文件描述符有数据可读或可写,
epoll_wait
将不停地返回通知,直到应用程序处理完数据或者阻塞。
- 当文件描述符就绪时,
- 边缘触发(ET,Edge-Triggered):
- 当文件描述符就绪时,
epoll_wait
只会通知一次,直到应用程序处理完数据并清空了文件描述符的缓冲区。 - 如果文件描述符的状态没有变化,
epoll_wait
不会重复通知应用程序。 - 这种模式下,应用程序需要注意,在一个事件通知之后,要一直读或写,直到发生
EAGAIN
或EWOULDBLOCK
错误。
- 当文件描述符就绪时,
为什么epoll这里要叫做边缘触发和水平触发呢?
这源于通信数字信号处理领域的术语,边缘和水平通常用于描述信号的特性
- 边缘触发(Edge-Triggered):
- "边缘" 指的是信号的变化边缘,即信号从一个状态变为另一个状态的瞬间。
- 在数字信号处理中,边缘通常用来表示信号的上升沿或下降沿,即信号从低电平到高电平或从高电平到低电平的瞬间。
- 水平触发(Level-Triggered):
- "水平" 指的是信号的水平状态,即信号所处的电平状态。
- 在数字信号处理中,水平触发通常用来描述信号保持在某个电平的状态,而不关心信号的变化瞬间。
1 Reference
https://electronics.stackexchange.com/a/21891
本站总访问量次 本站访客数人次 本文总阅读量次