epoll也是实现I/O多路复用的一种方法。epoll水平触发(level trigger,LT,LT为epoll的默认工作模式)与边缘触发(edge trigger,ET)两种工作模式。使用脉冲信号来解释LT和ET可能更加贴切。Level是指信号只需要处于水平,就一直会触发;而edge则是指信号为上升沿或者下降沿时触发。

LT:只要内核缓冲区有数据就一直通知,只要socket处于可读状态或可写状态,就会一直返回sockfd;

ET:只有状态发生变化才通知,只有当socket由不可写到可写或由不可读到可读,才会返回其sockfd;

注:(在添加EPOLLIN、EPOLLOUT事件的前提下。)

水平触发

1. 对于读操作

只要缓冲内容不为空,LT模式返回读就绪。

2. 对于写操作

只要缓冲区还不满,LT模式会返回写就绪。

边缘触发

1. 对于读操作

(1)当缓冲区由不可读变为可读的时候,即缓冲区由空变为不空的时候。

(2)当有新数据到达时,即缓冲区中的待读数据变多的时候。

(3)当缓冲区有数据可读,且应用进程对相应的描述符进行EPOLL_CTL_MOD 修改EPOLLIN事件时。

2. 对于写操作

(1)当缓冲区由不可写变为可写时。

(2)当有旧数据被发送走,即缓冲区中的内容变少的时候。

(3)当缓冲区有空间可写,且应用进程对相应的描述符进行EPOLL_CTL_MOD 修改EPOLLOUT事件时。

究竟触发了多少次呢?可以这样想:

(1)当数据量SIZE小于recv函数的接收长度len且小于系统缓冲SO_RCVBUF的时候:ET与LT都触发一次,recv执行一次。

(2)当数据量SIZE大于recv接收长度len但小于系统缓冲SO_RCVBUF的时候:LT触发SIZE/len次,ET触发一次。两者的recv函数执行SIZE/len。(一次ET触发可执行多次recv)

(3)当数据量SIZE大于recv接收长度len且大于系统缓冲SO_RCVBUF的时候:LT触发SIZE/len次,ET触发SIZE/SO_RCVBUF次。两者的recv函数都执行SIZE/len次。(同样一次ET触发执行了多次recv)

显然:

1、ET模式可以显著降低同一个Epoll事件的触发次数。

2、ET模式下同一文件描述符的同类事件有可能多次触发。如:系统读/写缓冲区溢出会分别导致同一个描述符的EPOLLIN/EPOLLOUT事件多次触发。

另外几点要知道:

(1)send和recv函数的len参数是每一次接受或发送的数据量的上限

(2)ET模式下确实每次都终止于EAGAIN。recv的指定的接收长度较小的时候,ET模式下的一次触发会执行多次recv。直到某次recv操作把errno变成了EAGAIN为止。此时errno==EAGAIN条件成立。

(3)这种触发是系统自动完成的。某些程序在errno==EAGAIN的时候,又做了写epoll_ctl配置有点误导人。

(4)两种模式下的recv函数执行的次数都是一样的。

(5)具体执行次数还要考虑缓冲区门限之类的,并非这么简单。

关于EPOLL的ET和LT模式的深入理解相关推荐

  1. epoll关于ET、LT模式和socket非阻塞模式的几个总结

    epoll的ET和LT模式 LT水平触发是默认的模式,只要缓冲区有消息就会触发,如果这次事件没有被处理,那么下一次调用epoll_wait的时候,事件仍然会被触发:ET边沿触发只会在第一次有消息的时候 ...

  2. Epoll之ET、LT模式

    Epoll之ET.LT模式 在使用epoll时,在函数 epoll_ctl中如果不设定,epoll_event 的event默认为LT(水平触发)模式. 使用LT模式意味着只要fd处于可读或者可写状态 ...

  3. JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·抽象工厂——理解“开放封闭”

    JavaScript 设计模式核⼼原理与应⽤实践 之 创建型:工厂模式·抽象工厂--理解"开放封闭" 一个不简单的简单工厂引发的命案 在实际的业务中,我们往往面对的复杂度并非数个类 ...

  4. lte tm模式_LTE MIMO 模式的学习理解

    <LTE MIMO 模式的学习理解>由会员分享,可在线阅读,更多相关<LTE MIMO 模式的学习理解(12页珍藏版)>请在人人文库网上搜索. 1.MIMO 学习心得 -Ell ...

  5. Android:安卓学习笔记之MVP模式的简单理解和使用

    Android MVP模式的简单理解和使用 MVP模式 1. 为什么使用MVP模式? 1.1.实例说明 2.一步步让你理解MVP 2.1.MVP实现第一步, 将页面拆分为M/V/P三个模块 2.2. ...

  6. Epoll在LT和ET模式下的读写方式

    在一个非阻塞的socket上调用read/write函数,返回EAGAIN 或者 EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK) 从字面上看, 意思是:EAGAIN: 再试一次 ...

  7. epoll的ET和LT模式

    从man手册中,得到ET和LT的具体描述如下 EPOLL事件有两种模型: Edge Triggered (ET) Level Triggered (LT) 假如有这样一个例子: 1. 我们已经把一个用 ...

  8. epoll的LT和ET模式

    原理參考该博客 从man手冊中,得到ET和LT的详细描写叙述例如以下 EPOLL事件有两种模型: Edge Triggered (ET) Level Triggered (LT) 假如有这样一个样例: ...

  9. epoll在ET和LT模式下读写

    在一个非阻塞的socket上调用read/write函数, 返回EAGAIN或者EWOULDBLOCK(注: EAGAIN就是EWOULDBLOCK) 从字面上看, 意思是:EAGAIN: 再试一次, ...

  10. Linux编程入门三网络编程三 epoll的LT和ET模式以及EPOLLONESHOT事件

    epoll对文件描述符的操作有两种模式:LT(Level Trigger 电平触发)模式和ET(Edge Trigger 边沿触发)模式. LT是默认的工作模式,这种模式下epoll相当于一个效率较高 ...

最新文章

  1. 基于caffe的度量学习实现(Siamese network Triplet network)
  2. 众里寻他千百度-- 轻量级持久化框架
  3. pymysql dataframe 写入sql
  4. [转载]为什么使用 SLF4J 而不是Log4J来做Java 日志
  5. 全备份失败后,如何手工清除exchange日志文件,附微软KB
  6. mysql中间件是运维工作内容_linux运维工作的七项内容
  7. springboot项目中jdk版本的问题
  8. (转) 学习淘淘商城第一课
  9. 常见排序算法:冒泡排序
  10. 开源MySQL数据传输中间件—DTLE
  11. java连接数据库的方式_java连接数据库的两种方法总结
  12. 阿里云Hologres外部表的创建及使用
  13. 祝贺swm8023刷HDU-Steps登顶+突破新Section,14.2不是传说中的高级计算几何,而是数学~~...
  14. iOS各大名人的博客
  15. 英文论文发表必备干货!SCI投稿7个阶段经典邮件模板,请拿走
  16. 爬虫120例之第17例,用Python面向对象的思路,采集各种精彩句子
  17. 电脑开机自动联服务器,如何让Mac开机自动连接到NAS或网上邻居上的电脑
  18. 59 Three.js 渲染两个场景和使用不同的相机,渲染在一个场景里面
  19. 把项目从meeclipces转移到idead中遇见的问题
  20. ”核高基“重大软件专项国家级验收形同虚设走过场

热门文章

  1. 计算机区分活动窗口,计算机WINDWS操作题.doc
  2. 在Vue项目中添加vue router
  3. PTA 程序设计天梯赛(61~80题)
  4. 《Flutter 从0到1构建大前端应用》读后感—第8章【持久化】
  5. Kafka-集群部署
  6. better-scroll在vue中的使用
  7. 《那些年啊,那些事——一个程序员的奋斗史》——26
  8. 360安全卫士对于易量安装打包的可执行程序进行病毒误报
  9. 引擎设计跟踪(九.2) 3DS MAX 导出插件 继续
  10. as3 socket 跨域连接