即Level-Triggered and Edge-Triggered
简单说来
Level-Triggered:
只要事件是处于就绪状态,你每询问一次,就告诉你一次它处于就绪状态。
Edge-Triggered:
只有在状态改变的时候告诉你,这也是为什么et模式下,建议用非阻塞的socket。
下面我们来看看epoll对于两类触发是怎么返回给用户的。
当用户调用epoll_wait时会返回一组事件,包括水平触发的或边缘触发的。
epoll中有两个重要的数据结构红黑树rbt,和一个就绪列表ready-list。
调用epoll_wait时其实就是从ready-list中拿数据,
一般说来从ready-list中每拿一个事件就删除一个事件,
但如果拿到的事件是水平触发,它会放回read-list。
这是一个很巧妙的操作!
这样下次再取到这个事件的时候只要判断一下该事件是否还有效就可以了。
这样对于内核中其他地方来说,它们对于epoll只要有边缘触发的概念就好了。
网络IO什么的,只要在状态改变的时候,告诉epoll就OK了。
而在epoll内部,它自己区分边缘和水平,并呈现给用户。
具体参见linux内核源码。
相关推荐
socket网络编程-epoll-水平触发和边缘触发源码。 (1)I/O多路复用技术用于监控多个TCP连接上的数据收发,而epoll就是一种在Linux上使用的I/O多路复用并支持高并发的典型技术。传统的select、poll也是I/O多路复用...
1.平触发的阻塞sockfd 2.边缘触发的阻塞sockfd 3.平触发的阻塞connfd 4.平触发的阻塞connfd 5.边缘触发的阻塞connfd 6.边
Linux IO的水平触发和边缘触发的区别 在linux的IO多路复用中有水平触发,边缘触发两种模式,这两种模式的区别如下: 水平触发:如果文件描述符已经就绪可以非阻塞的执行IO操作了,此时会触发通知.允许在任意时刻重复...
linux epoll ET和LT触发深入分析,深入剖析epoll触发机制。
1. 两者区别:在于发生事件的时间点,条件触发:只要输入缓冲有数据就一直通知该事件;边缘触发:输入缓冲受到数据时仅注册一次事件。epoll默认以条件触发方式工作
epoll机制epoll_create、epoll_ctl、epoll_wait、close(在epoll的ET模式下,read和write或send和recv当返回值0且errno=EAGAIN - linking530的专栏 - CSDN博客.mht
timerfd和epoll整理
EPOLL的ET和LT模式.doc 网络服务器编程
poll和epoll内核源码剖析
对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同...
FIFO配合管道PIPE,实现FIFO传递数据,PIPE触发epoll,异步IO效果
自己学习并改写的epoll代码,在Linux测试没问题,分别实现了epoll的LT模式和ET模式,初学者可以学一学
基于epoll 协程池的golang网络库。支持epoll事件触发,读数据和业务逻辑处理分离,最大化利用cpu,防止内存急剧暴涨,适用于长连接、短连接,支持请求对象池和连接对象池
poll 与epoll分析,poll 与epoll的源代码,
多路IO复用-epoll,通过epoll实现事件通知,实现了水平(阻塞),边缘(非阻塞)触发
Lua的epoll模块 更多细节,请查看sample.lua API: ok,err=epoll.setnonblocking(fd) 设置一个文件描述符非阻塞。 epfd,err=epoll.create() 创建一个 epoll 文件描述符。ok,err=epoll.register(epfd,fd,event...
举源码实例来说明epoll之LT和ET模式的区别
linux中 epoll poll 和select的区别
linux epoll多线程编程 例子