ET模式:
因为ET模式只有从unavailable到available才会触发,所以
1、读事件:需要使用while循环读取完,一般是读到EAGAIN,也可以读到返回值小于缓冲区大小;
如果应用层读缓冲区满:那就需要应用层自行标记,解决OS不再通知可读的问题
2、写事件:需要使用while循环写到EAGAIN,也可以写到返回值小于缓冲区大小
如果应用层写缓冲区空(无内容可写):那就需要应用层自行标记,解决OS不再通知可写的问题。
LT模式:
因为LT模式只要available就会触发,所以:
1、读事件:因为一般应用层的逻辑是“来了就能读”,所以一般没有问题,无需while循环读取到EAGAIN;
如果应用层读缓冲区满:就会经常触发,解决方式如下;
2、写事件:如果没有内容要写,就会经常触发,解决方式如下。
LT经常触发读写事件的解决办法:修改fd的注册事件,或者把fd移出epollfd。
总结:
目前好像还是LT方式应用较多,包括redis、libuv等。(nginx使用ET)
LT模式的优点在于:事件循环处理比较简单,无需关注应用层是否有缓冲或缓冲区是否满,只管上报事件。缺点是:可能经常上报,可能影响性能。
相关推荐
EPOLL的ET和LT模式.doc 网络服务器编程
举源码实例来说明epoll之LT和ET模式的区别
linux epoll ET和LT触发深入分析,深入剖析epoll触发机制。
自己学习并改写的epoll代码,在Linux测试没问题,分别实现了epoll的LT模式和ET模式,初学者可以学一学
epoll机制epoll_create、epoll_ctl、epoll_wait、close(在epoll的ET模式下,read和write或send和recv当返回值0且errno=EAGAIN - linking530的专栏 - CSDN博客.mht
selet-poll-epoll三种模式的简介与比较
用户在调用epoll_wait时,ET模式产生的事件只会报告一次。不管epoll管理的连接有多少,epoll_wait都会在常数时间内返回。而使用LT模式时,epoll_wait会去遍历所有连接的状态,只要某个连接的接收缓冲区中还有数据,...
依赖了boost 库的线程池
Epoll模型详解
自己做的一个基于epoll的服务器,支持推送和问答模式的需求。只做了通讯层,个人觉得对于初学者还是很有参考意义。
14-补充对比ET和LT.aviAvi 15-epoll反应堆模型总述avi 16-epoll反应堆main逻辑aviAvi 17-epoll反应堆-给lfd和cfd指定回调函数.avi Ai 18-epoll反应堆-initlistensocket小总结.aviAi 19-epoll反应堆-wait被触发后...
包括从Linux内核中找到的epoll源码以及提炼版本的两种源码,并且有个人详细注释理解
linux 下,采用epoll模型,演示web服务器“惊群”现象。 创建8个子进程,即工作进程,同时持有监听套接字,当有新连接 时,8个子进程被扰动。
timerfd和epoll整理
关于epoll iocp select等网络模型运行实例代码
poll和epoll内核源码剖析
linux中 epoll poll 和select的区别
Linux_Epoll介绍和程序实例,帮你了解EPOLL编程
poll 与epoll分析,poll 与epoll的源代码,