当前位置:网站首页>epoll水平出发何边沿触发
epoll水平出发何边沿触发
2022-07-28 15:58:00 【从一而终】
LT和ET模式
epoll对文件描述符的操作有2种模式: LT和ET
LT Level Trigger, 电平触发 默认 只有文件描述符号上有未处理的读写事件都会通知, 只要存在着事件就会不断的触发,直到处理完成
ET Edge Trigger, 边沿触发 通过EPOLLET来设置 当且仅当读写事件到来时通知, 只触发一次相同事件或者说只在从非触发到触发两个状态转换的时候儿才触发
LT(level triggered)是缺省的工作方式,并且同时支持block和no-block socket.在这种做法中,内核告诉你一个文件描述符是否就绪了,然后你可以对这个就绪的fd进行IO操作。如果你不作任何操作,内核还是会继续通知你的,所以,这种模式编程出错误可能性要小一点。传统的select/poll都是这种模型的代表. 这种模式相当于一个效率高的poll
对于采用LT模式工作的文件描述符, 当epoll_wait检测到其上有事件发生并将此事件通知应用程序后, 应用程序可以不用立即处理该事件. 这样, 当应用程序下次调用epoll_wait时, epoll_wait还会再次向应用程序通告此事件,直到该事件被处理.
ET (edge-triggered)是高速工作方式,只支持no-block socket。在这种模式下,当描述符从未就绪变为就绪时,内核通过epoll告诉你。然后它会假设你知道文件描述符已经就绪,并且不会再为那个文件描述 符发送更多的就绪通知,直到你做了某些操作导致那个文件描述符不再为就绪状态了(比如,你在发送,接收或者接收请求,或者发送接收的数据少于一定量时导致 了一个EWOULDBLOCK 错误)。但是请注意,如果一直不对这个fd作IO操作(从而导致它再次变成未就绪),内核不会发送更多的通知(only once),不过在TCP协议中,ET模式的加速效用仍需要更多的benchmark确认。
而当往epoll内核事件表中注册一个文件描述符上的EPOLLET事件时, epoll将以ET模式来操作该文件描述符, ET模式是epoll的高效工作模式. 对于采用ET模式工作的文件描述符, 当epoll_wait检测到其上有事件发生并将此事件通知应用程序后, 应用程序必须立即处理该事件, 因为后续的epoll_wait调用将不再向应用程序通知该事件.
可见, ET模式在很大程序上降低了同一个epoll事件被重复触发的次数, 因此效率比LT模式高.
边栏推荐
- Interesting kotlin 0x08:what am I
- Optimization of network request success rate in IM instant messaging software development
- ANSA二次开发 - 在PyCharm上搭建ANSA/META二次开发环境
- Qt学习之Qt Designer(设计师)
- MySQL CDC if the binlog log file is incomplete, can you read all the data in the full volume stage
- 智慧园区是未来发展的趋势吗?
- Redis source code optimization -- binding core
- php关于数据量大导出数据或者遍历数据导致内存溢出超时等问题
- HyperMesh auto save (enhanced) plug-in instructions
- 在vs code上配置Hypermesh二次开发环境
猜你喜欢

Ansa secondary development - build ansa/meta secondary development environment on pycharm

ANSYS secondary development - MFC interface calls ADPL file

Sort 1-insert sort and Hill sort

Some suggestions on optimizing HyperMesh script performance

FX3开发板 及 原理图

Sort 2 bubble sort and quick sort (recursive and non recursive explanation)

Leetcode learn to insert and sort unordered linked lists (detailed explanation)

Introduction and implementation of queue (detailed explanation)

Im im development optimization improves connection success rate, speed, etc

LeetCode每日一练 —— 160. 相交链表
随机推荐
Multiple commands produce '... /xxx.app/assets.car' problem
CRC16 data verification supports modelbus and XMODEM verification modes (C language)
Li Hongyi, machine learning 5. Tips for neural network design
Asp.net large file block upload breakpoint resume demo
Interesting kotlin 0x06:list minus list
Qt学习之Qt Designer(设计师)
Quickly master kotlin set functions
Qt学习之安装
"Wei Lai Cup" 2022 Niuke summer multi school training camp 3 acfhj
Leetcode daily practice - 160. Cross linked list
ABAQUS GUI interface solves the problem of Chinese garbled code (plug-in Chinese garbled code is also applicable)
ANSYS secondary development - MFC interface calls ADPL file
微软100题-天天做-第11题
The local area network cannot access the Apache server
阿里大哥教你如何正确认识关于标准IO缓冲区的问题
遭MQ连连干翻后的醒悟!含恨码出这份MQ手册助力秋招之旅
Mysql与Oracle的13点区别
HyperMesh auto save (enhanced) plug-in instructions
LeetCode每日一练 —— 剑指Offer 56 数组中数字出现的次数
学会使用MySQL的Explain执行计划,SQL性能调优从此不再困难