水平触发与边沿触发

news/2025/2/7 6:15:08/

Epoll 的工作模式
LT 模式 (水平触发)

LT(level - triggered)是缺省的工作方式,并且同时支持 block 和 no-block socket。在这种做法中,内核告诉你一个文件描述符是否就绪了,然后你可以对这个就绪的 fd 进行 IO 操作。如果你不作任何操作(没有读数据或者读数据还剩余一部分),内核还是会继续通知你的。

eg. 假设委托内核检测读事件 -> 检测fd的读缓冲区

读缓冲区有数据 - > epoll检测到了会给用户通知
a.用户不读数据,数据一直在缓冲区,epoll 会一直通知
b.用户只读了一部分数据,epoll会通知
c.缓冲区的数据读完了,不通知
ET 模式(边沿触发)

ET(edge - triggered)是高速工作方式,只支持 no-block socket。在这种模式下,当描述符从未就绪变为就绪时,内核通过epoll告诉你。然后它会假设你知道文件描述符已经就绪,并且不会再为那个文件描述符发送更多的就绪通知,直到你做了某些操作导致那个文件描述符不再为就绪状态了。

请注意:如果一直不对这个 fd 作 IO 操作(从而导致它再次变成未就绪),内核不会发送更多的通知(only once)。

ET 模式在很大程度上减少了 epoll 事件被重复触发的次数,因此效率要比 LT 模式高。

epoll工作在 ET 模式的时候,必须使用非阻塞套接口,以避免由于一个文件句柄的阻塞读/阻塞写操作把处理多个文件描述符的任务饿死。

eg. 假设委托内核检测读事件 -> 检测fd的读缓冲区

读缓冲区有数据 - > epoll检测到了会给用户通知
a.用户不读数据,数据一致在缓冲区中,epoll下次检测的时候就不通知了
b.用户只读了一部分数据,epoll不通知 (但是客户端再发送信息到读缓冲区就又会通知,即使原先读缓冲区依旧有数据)
c.缓冲区的数据读完了,不通知
 


http://www.ppmy.cn/news/85625.html

相关文章

无领导群面如何精准得分?

其实进入面试环节,大家脱颖而出的机会可以视为均等的,在面试环节表现突出,即使学历经历有些劣势,一样可以拿到offer。 但缺乏一定无领导技巧,在面对高学历对手时,心理压力也比较大。今天就面试环节“刷人最…

C语言中的extern关键字

C语言中的extern关键字 作用扩展 作用 在C语言中,extern关键字用于声明外部变量或函数。它通常用于在一个源文件中引用另一个源文件中定义的全局变量或函数。 当您在一个源文件中声明一个变量或函数为extern时,它表示该变量或函数的定义存在于另一个源…

智能家居新选择,雷达感应器成品方案,人体存在感应控制照明联动

在现代社会,随着智能化技术的不断推进,人体存在感应控制照明已经成为了一项必备的技术手段。 ISE101T-5雷达感应器成品,作为一款拥有多种特点和优势的设备,不仅可以感应到室内的人体存在,还能够通过控制照明实现更为舒…

Unity DOTS从原理到应用

什么是DOTS? Unity的DOTS(Data-Oriented Technology Stack)是一种数据驱动的技术堆栈,旨在提高Unity游戏引擎的性能和可伸缩性。它使用C# Job System,Burst Compiler和Entity Component System(ECS)来组合…

生成VLC 及其模块的全面帮助

使用vlc.exe -H命令生成VLC帮助文件vlc-help.txt -h, --help, --no-help 打印 VLC 帮助 (可以和 --advanced 和 --help-verbose 一起使用) (默认禁用) -H, --full-help, --no-full-help VLC 及…

G2O学习使用

g2o全称是General Graph Optimization,也就是图优化,我们在做SLAM后端或者更加常见的任何优化问题(曲线拟合)都可以使用G2O进行处理。 就经验而言,solvers给人的感觉是大同小异,而 types 的选取&#xff0…

阿里高级工程师对C语言预处理指令的理解

目录 预处理器指令列表 预处理器指令的流程 四种主要类型的预处理器指令 结论 我们可以将预处理器视为一个编译过程,该过程在开发人员运行程序时运行。它是使用 c/c 语言执行程序的预处理。若要初始化预处理器命令的进程,必须使用哈希符号 &#xf…

一个人的旅行

说一下,两次的旅行。一次是三月底四月初,一次是四月底五月初。 我的第一站,帝都!!! 31号晚上八点半的高铁去北京,到达北京已经快十二点了。武局的G528次列车。 来到北京后,这是我第…