EPOLL的工作模式 ET and LT
近日又继续学习了一下EPOLL的工作模式,这会基本上搞清楚了,因而撰写了此篇文档进行描述。先来一段网上的介绍文档:
EPOLL事件分发系统可以运转在两种模式下:Edge Triggered (ET)、Level Triggered (LT)。
LT是缺省的工作方式,并且同时支持block和no-block socket;在这种做法中,内核告诉你一个文件描述符是否就绪了,然后你可以对这个就绪的fd进行IO操作。如果你不作任何操作,内核还是会继续通知你的,所以,这种模式编程出错误可能性要小一点。传统的select/poll都是这种模型的代表。
ET是高速工作方式,只支持no-block socket。在这种模式下,当描述符从未就绪变为就绪时,内核通过epoll告诉你。然后它会假设你知道文件描述符已经就绪,并且不会再为那个文件描述 符发送更多的就绪通知,直到你做了某些操作导致那个文件描述符不再为就绪状态了。但是请注意,如果一直不对这个fd作IO操作(从而导致它再次变成未就 绪),内核不会发送更多的通知。
后面才是我想说的内容,既然ET模式是高速模式,那我们进行服务器开发是一定要使用的了,可是查遍文档,也没有找到ET模式的设置方法,到底如何设置和使 用呢?通过反复测试,终于搞明白“EPOLLET”就是ET模式的设置了,也许是我太笨所以才迷惑这么久了,以下就是将TCP套接字hSocket和 epoll关联起来的代码:
struct epoll_event struEvent;
struEvent.events = EPOLLIN | EPOLLOUT | EPOLLET;
struEvent.data.fd = hSocket;
epoll_ctl(m_hEpoll, EPOLL_CTL_ADD, hSocket, &struEvent);
如果将监听套接字m_hListenSocket和epoll关联起来,则代码如下:
struct epoll_event struEvent;
struEvent.events = EPOLLIN | EPOLLET;
struEvent.data.fd = m_hListenSocket;
epoll_ctl(m_hEpoll, EPOLL_CTL_ADD, m_hListenSocket, &struEvent);
如果想使用LT模式,直接把事件的赋值修改为以下即可,也许这就是缺省的意义吧。
struEvent.events = EPOLLIN | EPOLLOUT; //用户TCP套接字
struEvent.events = EPOLLIN; //监听TCP套接字
不过,通过我的测试确定,这两种模式的性能差距还是非常大的,最大可以达到10倍。100个连接的压力测试,其他环境都相同,LT模式CPU消耗99%、ET模式15
EPOLL的工作模式 ET and LT相关推荐
- epoll用到的epoll_create,epoll_ctl, epoll_wait三个函数,以及epoll的工作模式
首先附上B站关于epoll原理讲解视频连接:https://www.bilibili.com/video/BV1qJ411w7du?from=search&seid=1476914145148 ...
- C语言 epoll 工作模式之lt 等级触发 level trigger
友链 // epoll的工作模式 // lt level trigger 水平触发模式 // et edge trigger 边缘触发 // lt模式是默认的 // et是高速工作方式 // 前者会一 ...
- C语言 epoll 工作模式之et 边缘触发 edge trigger
友链 占位占位占位占位占位占位占位占位占位占位占位占位占位占位占位占位占位占位占位 占位占位占位占位占位占位占位占位占位占位占位占位占位占位占位占位占位占位占位 占位占位占位占位占位占位占位占位占位占 ...
- 五种高级IO | select poll epoll 水平触发模式 边缘触发模式 惊群问题
一.高级IO 在介绍多路复用IO之前,先介绍一下其它四种高级IO: 阻塞IO: 在内核将数据准备好之前,系统调用会一直等待.所以的套集字默认是阻塞方式. 非阻塞IO: 在内核还未将数据准备好,则系统调 ...
- epoll的ET工作模式和LT工作模式
1.epoll的两种工作模式介绍 epoll的两种模式ET和LT: LT模式(水平触发):是缺省的工作方式,并且同时支持block和non-block socket.在这种做法中,内核告诉你一个文件描 ...
- (转)彻底学会使用epoll(一)——ET模式实现分析
注:之前写过两篇关于epoll实现的文章,但是感觉懂得了实现原理并不一定会使用,所以又决定写这一系列文章,希望能够对epoll有比较清楚的认识.是请大家转载务必注明出处,算是对我劳动成果的一点点尊重吧 ...
- 彻底学会使用epoll(一)——ET模式实现分析
注:之前写过两篇关于epoll实现的文章,但是感觉懂得了实现原理并不一定会使用,所以又决定写这一系列文章,希望能够对epoll有比较清楚的认识.是请大家转载务必注明出处,算是对我劳动成果的一点点尊重吧 ...
- 操作文件操作符的工作模式:LT(电平触发)ET(边缘触发)实验对比
文章目录 什么是LT和ET? LT(Level Trigger)模式: ET(Edge Trigger)模式: 得出结论,ET模式的工作效率要比LT高,因为ET模式降低了同一事件被重复触发的次数 实验 ...
- epoll详细工作原理 http://blog.csdn.net/hdutigerkin/article/details/7517390
epoll详细工作原理 2012-04-27 14:35 4007人阅读 评论(1) 收藏 举报 工作socketcachelistnullfile 开发高性能网络程序时,windows开发者们言必称 ...
最新文章
- 3月到9月之9月到12月
- antd 表单提交,文件和表单内容一起提交,表单校验
- mysql5.5数据库名_mysql5.5数据库名
- 【项目实战】汽车金融评分卡
- 复制文件时怎么保留权限
- OpenGL编程指南3:GLUT:OpenGL使用工具库
- CPU8085 8086名字的由来
- 程序员如何才算真正的高效编程?
- 小D课堂 - 新版本微服务springcloud+Docker教程_4-03 高级篇幅之Ribbon负载均衡源码分析实战...
- java commons math_Apache Commons Math
- 1叉叉加速器分析_加速分析
- 为什么电脑不能安全关闭计算机,电脑无法正常关机的原因以及解决办法
- 【数据分析可视化】股票市场分析实战之风险分析
- 微信小程序 评论功能实现
- R语言入门——不掉包实现FNN(单层感知机)
- 常用的HDFS Shell命令及解析
- 比 Elasticsearch 更快, RediSearch + RedisJSON = 王炸~
- 利用Python实现新冠疫情数据可视化(获取疫情历史数据,制作南丁格尔玫瑰图、疫情地图、动态疫情组合图、词云)
- 三大战略分析方法——SWOT、PEST、波特五力模型
- 吉时利Keithley软件2600系列2611B|2612B|2614B|2634B NS-SourceMeter源表软件