epoll的LT和ET模式介绍

目录

1.epoll的LT和ET模式介绍

2.epoll的ET模式如何处理

2.1 epoll的ET模式编程读取数据的处理方式

2.2 将描述符设置为非阻塞模式的方法

3.ET模式的总结

4.epoll的LT模式和ET模式总结

5.IO复用总结


1.epoll的LT和ET模式介绍

epoll对文件描述符有两种操作模式:

LT(Level Trigger,电平触发)模式

ET(Edge Trigger,边沿触发)模式。

LT 模式是默认的工作模式。当往 epoll 内核事件表中注册一个文件描述符上的 EPOLLET 事件时,epoll 将以高效的 ET 模式来操作该文件描述符。

2.epoll的ET模式如何处理

2.1 epoll的ET模式编程读取数据的处理方式

将描述符设置为 非阻塞模式 +循环读取数据

也就是ET模式下的描述符必须是非阻塞的

2.2 将描述符设置为非阻塞模式的方法

//ser_epoll_ET.c
#include <fcntl.h>void setnonblock(int fd)
{int oldfl=fcntl(fd,F_GETFL);int newfl=oldfl|O_NONBLOCK;if(fcntl(fd,F_SETFL,newfl)==-1){perror("fcntl error\n");}
}

3.ET模式的总结

ET模式下我们都需要做哪些事情?一共三点:

(1)添加事件类型的时候一定要添加上EPOLLET,这叫开启ET模式;;

(2)描述符要设置成非阻塞模式

(3)在IO函数返回以后,就是epoll_wait返回以后,它提醒我们描述符上有读事件产生了,我们要循环去处理;直到把这个描述符上的数据去处理完;然后再去处理下一个描述符;

所以就是说ET模式下的编程就要求我们的描述符必须是非阻塞模式

面试题:ET模式和LT模式编程有什么区别?

除了以上三点(1)(2)(3),还有一个最重要的区别:ET模式下的编程就要求我们的描述符必须是非阻塞模式

而LT模式阻塞或者非阻塞都可以,都不影响;

4.epoll的LT模式和ET模式总结

对于 LT 模式操作的文件描述符,当 epoll_wait 检测到其上有事件发生并将此事件通知应用程序后,应用程序可以不立即处理该事件。这样,当应用程序下一次调用 epoll_wait 时,还会再次向应用程序通告此事件,直到该事件被处理。

对于 ET 模式操作的文件描述符,当 epoll_wait 检测到其上有事件发生并将此事件通知应用程序后,应用程序必须立即处理该事件,因为后续的 epoll_wait 调用将不再向应用程序通知这一事件。所以 ET 模式在很大程度上降低了同一个 epoll 事件被重复触发的次数,因此效率比 LT 模式高。

5.IO复用总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/831940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux(openEuler、CentOS8)常用的IP修改方式(文本配置工具nmtui+配置文件+nmcli命令)

----本实验环境为openEuler系统<以server方式安装>&#xff08;CentOS类似&#xff0c;可参考本文&#xff09;---- 一、知识点 &#xff08;一&#xff09;文本配置工具nmtui(openEuler已预装) nmtui&#xff08;NetworkManager Text User Interface&#xff09;是一…

关于apache+php用户验证

一.直接在apache配置配置用户信息 1.apache配置可以参考外部文档 https://developer.aliyun.com/article/507049 2.上面配置好在php获取用户信息&#xff08;登录apache会拦截&#xff09; $userName $_SERVER[PHP_AUTH_USER];$password $_SERVER[PHP_AUTH_PW]; 二.上面直…

在线OJ——链表经典例题详解

引言&#xff1a;本篇博客详细讲解了关于链表的三个经典例题&#xff0c;分别是&#xff1a;环形链表&#xff08;简单&#xff09;&#xff0c;环形链表Ⅱ&#xff08;中等&#xff09;&#xff0c;随机链表的复制&#xff08;中等&#xff09;。当你能毫无压力地听懂和成功地…

再学Java基础——final关键字

在Java中&#xff0c;final关键字是一个修饰符&#xff0c;它可以应用于类、方法、变量和常量。以下是final关键字在Java中的不同用途及其作用&#xff1a; final类&#xff1a; 当一个类被声明为final时&#xff0c;它不能被继承。这意味着没有其他类可以扩展这个类。作用&…

【莫比乌斯变换-02】关于莫比乌斯变换属性梳理

文章目录 一、说明二、多视角看莫比乌斯变换2.1 从几何角度2.2 复分析中的莫比乌斯变换2.3 莫比乌斯变换运算组合2.4 莫比乌斯变换的不动点2.5 三个点决定一个莫比乌斯变换2.6 交叉比2.7 莫比乌斯变换的逆变换 三 莫比乌斯变换性质证明3.1 证明1&#xff1a;莫比乌斯变换将圆变…

【莫比乌斯变换-03】python实现圆对圆的变换

文章目录 一、说明二、python实现复平面的莫比乌斯变换三、线的变换四、画笑脸 一、说明 我们在前面的文章中&#xff0c;叙述了莫比乌斯变换的复数分析&#xff0c;以及种种几何属性&#xff0c;本篇中叙述如何程序地实现&#xff1a;复平面上的圆在莫比乌斯变换下的图像是另…

基于高德 API 的自动获取气候数据的 Python 脚本

文章目录 高德申请 Key脚本介绍运行结果示例 源代码&#xff1a; https://github.com/ma0513207162/PyPrecip。pyprecip\reading\read_api.py 路径下。 项目介绍&#xff1a;PyPrecip 是一个专注于气候数据处理的 Python 库&#xff0c;旨在为用户提供方便、高效的气候数据处理…

linux基本操作

vim的基本操作 正常模式&#xff1a;启动vim后默认处于正常模式。不论位于什么模式&#xff0c;按下Esc建都会进入正常模式。 插入模式&#xff1a;在正常模式中按下i&#xff0c;l&#xff0c;a&#xff0c;A等键&#xff0c;会进入插入模式。现在只用记住按i键会进行插入模…

文本内容如何扫码展示?文本转二维码常用技巧

随着网络的不断发展&#xff0c;现在很多人会通过二维码的方式来作为内容的载体&#xff0c;用来给其他人提供需要的信息或者其他内容。其中&#xff0c;将文本制作二维码就是很常用的一种方式&#xff0c;通过扫码展示文字内容&#xff0c;比如信件、物品信息、联系方式等类型…

python学习笔记----函数进阶(七)

一、函数多个返回值 def test_return():x 1y "hello"z Truereturn x, y, za, b, c test_return()print(a) print(b) print(c)二、函数多种传参方式 2.1 函数参数种类 根据使用方式上的不同&#xff0c;函数有4种常见参数的使用方式&#xff1a; 位置参数关键…

EPAI手绘建模APP资源管理和模型编辑器2

g) 矩形 图 26模型编辑器-矩形 i. 修改矩形的中心位置。 ii. 修改矩形的长度和宽度。 h) 正多边形 图 27模型编辑器-内接正多边形 图 28模型编辑器-外切正多边形 i. 修改正多边形的中心位置。 ii. 修改正多边形中心距离端点的长度。 iii. 修改正多边形的阶数。阶数为3&…

Linux Multipath极简安装配置

1.安装软件 #yum install -y device-mapper* 2.开启并设置开机启动 #systemctl start multipathd && systemctl enable multipathd 3.连接存储 在存储上对主机进行卷映射 4.修改配置文件 注&#xff1a;此配置文件可能存在&#xff0c;也可能不存在&#xff0c…

禅道项目管理系统身份认证绕过漏洞复现(QVD-2024-15263)

0x01 产品简介 禅道项目管理软件是国产的开源项目管理软件,专注研发项目管理,内置需求管理、任务管理、bug管理、缺陷管理、用例管理、计划发布等功能,完整覆盖了研发项目管理的核心流程。 0x02 漏洞概述 2024年4月,互联网披露禅道系统存在身份认证绕过的漏洞情报。经分…

【Unity 协程】

Unity中的协程&#xff08;Coroutine&#xff09;是一种编程结构&#xff0c;它允许你以一种看似同步的方式编写可能需要异步执行的代码。协程特别适用于需要在一定时间后执行操作&#xff0c;或者在循环执行某段代码直到某个条件满足时的场景。 协程使用IEnumerator委托来实现…

Qt中的对象树

一. QT对象树的概念 QObject 的构造函数中会传入一个 Parent 父对象指针&#xff0c;children() 函数返回 QObjectList。即每一个 QObject 对象有且仅有一个父对象&#xff0c;但可以有很多个子对象。 那么Qt这样设计的好处是什么呢&#xff1f;很简单&#xff0c;就是为了方…

基于HAL库的stm32中定时器的使用--定时器中断每隔一秒进行led灯的闪烁以及定时器生成PWM

一&#xff1a;什么是定时器 &#xff08;1&#xff09;stm32定时器&#xff0c;是存在于stm32单片机中的一个外设。stm32共有八个定时器&#xff0c;两个高级定时器&#xff08;TIM1、TIM8&#xff09;&#xff0c;四个通用定时器&#xff08;TIM2、TIM3、TIM4、TIM5&#xff…

docker 指定根目录 迁移根目录

docker 指定根目录 迁移根目录 1、问题描述2、问题分析3、解决方法3.1、启动docker程序前就手动指定docker根目录为一个大的分区(支持动态扩容)&#xff0c;事前就根本上解决根目录空间不够问题3.1.0、方法思路3.1.1、docker官网安装文档3.1.2、下载docker安装包3.1.3、安装doc…

贪吃蛇(下)游戏的实现

感谢大佬的光临各位&#xff0c;希望和大家一起进步&#xff0c;望得到你的三连&#xff0c;互三支持&#xff0c;一起进步 个人主页&#xff1a;LaNzikinh-CSDN博客 文章目录 前言一.蛇和食物的打印二.游戏的运行逻辑三.结束游戏 &#xff08;善后工作&#xff09;四.游戏的测…

找出两个数的最小公倍数和最大公约数

1 问题 已知两个数&#xff0c;用代码写出程序&#xff0c;求两个数的最小公倍数和最大公约数? 2 方法 利用Python自定义函数解决 代码清单 1 #Made by Txd,Hsy,Lyhdef calculation(x,y):#自定义一个函数 common_multiplemin(x,y)#找出两个数最小的那个数 for i in rang…

【数据结构和算法】--RangeSet时间范围管理示例

目录 一、问题二、RangeSet实现原理2.1、RangeSet常用方法2.2、核心原理2.3、核心特性2.4、基本使用 三、具体应用 一、问题 最近项目要求对一批时间范围进行管理&#xff0c;要求不能交叉。RangeSet是专门用于高效处理范围集合。 二、RangeSet实现原理 RangeSet表示一组不重…