多路IO复用模型——epoll模型

文章目录

  • 一、epoll模型是什么?
  • 二、epoll模型工作流程
  • 三、epoll模型优缺点
  • 总结


一、epoll模型是什么?

epoll模型是整合了select和poll优势,并且优化了已知的问题。
使用红黑树作为监听集合(监听树)
通过epoll_create创建该监听树,返回值为指向树的描述符。
参数:树的大小。
监听树的访问操作:epoll_ct。
第一个参数是树的描述符,第二个参数是树的添加修改和删除的关键字,第三个参数是sock的值。(因为将sock的值当成索引编号)
注:此处的修改只能修改事件,因为sock与Index索引是一致的。

二、epoll模型工作流程

epoll模型与select和poll最大的区别就是没有轮询了。
监听改为:异步操作
让监听树(sock)与网络设备绑定
但其实epoll也是有监听队列的,不过是自己在内核层中实现的。称为epoll等待队列。(不是轮询,体积更小,效率更高)
监听树上的节点在进入监听队列中都会被包裹为监听项或就绪项,再与网络设备绑定。如果有人开始发数据,网卡会第一时间知道并给等待队列发一个通知(就绪通知),而且还会告诉是谁就绪了。
树节点中还有一个隐式成员:回调函数。
就绪通知发回过来,这个回调函数就会执行,然后将自己弹出至就绪链表(双向链表)。可以理解为自己知道自己就绪了。
就绪链表中存储着就绪节点,但是这个链表在内核层,所以会将这个链表拷给用户空间,在其中会变为就绪数组

如果是添加,则会将首元素(也就是1)删除,其余元素依次前移,新元素添加到尾部。

三、epoll模型优缺点

优点:

  1. epoll不用担心轮询问题, 所以没有监听限制, 可以监听系统最大描述符数量, 并没有多余开销。
  2. epoll并不存在轮询问题, 无需担心监听数量增大,系统开销增大。
  3. epoll监听到就绪直接返回就结节点,(sock) 用户遍历处理这些sock即可。
  4. epoll直接返回就绪的sock,用户直接处理即可
  5. epoll监听集合在内核层, 所以不会出现重复拷贝和重复挂载的问题,保证每个节点只拷贝一次, 只挂载一次。
  6. epoll与poll一样,监听的事件更丰富, 而后设置监听比较灵活,可以对不同的sock设置不同的事件监听。

缺点:

  1. 系统限制,windows系统无法使用。
  2. 因为底层为红黑树,所以红黑树的缺点也是它的缺点。

总结

监听能力上:epoll碾压select和poll。
处理能力上:跟监听能力无关,所以他三一样。
所以:
监听部分:通过IO复用技术监听管理有效连接。
处理部分:并发处理,快速反应。

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

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

相关文章

先进计算产业促湖南数字经济规模突破1.7万亿元

中新网湖南新闻1月26日电 (于冬阳 周沁怡)“截至2023年底,集群汇聚了中电长城、飞腾、麒麟等1400余家企业,产值达1800亿元。”1月26日,国家新一代自主安全计算系统产业集年度工作推进会在长沙举行,国家新一代自主安全计算系统产业…

Segment Routing MPLS概述

段路由SR(Segment Routing)是基于源路由理念而设计的在网络上转发数据包的一种协议。Segment Routing MPLS是指基于MPLS转发平面的Segment Routing,下文简称为Segment Routing。Segment Routing将网络路径分成一个个段,并且为这些…

python-分享篇-使用海龟turtle模块实现幸福大转盘

文章目录 准备代码效果 准备 一、根目录下放图片 代码 from turtle import * import turtle from random import randint import sys #屏幕初始化 screen turtle.Screen() screen.title("幸运大转盘 转转转~") screen.setup(480,450) screen.bgpic("转盘.png…

低代码助力企业转型可视化

随着企业数字化转型的加速推进,软件开发变得日益重要。然而,传统的软件开发流程往往繁琐且费时,降低了企业转型的效率。低代码开发平台的兴起为企业提供了一种快速、灵活且可视化的解决方案,使企业转型更加高效和可持续。 随着数字…

Android底部导航栏创建——ViewPager + RadioGroup

Android底部导航栏有多种实现方式,本文详解其中的ViewPager RadioGroup方式的实现步骤。 我们先来看以下看一下最终做出的效果,使大家有个基本概念。 本结构特点: 1,ViewPager部分触摸左右滑动切换页面,RadioGroup部…

怎么获取二维码的链接?二维码转链接只需3步

怎么从二维码中提取内容呢?现在很多内容都会用二维码方式来存储,但是有些场景下二维码是无法使用的时候,想要查看二维码中的内容,就需要分解二维码成链接后使用。那么二维码分解成链接具体该怎么做呢?今天就将在线二维…

计算机组成原理--4.指令系统

一.指令格式 二.指令分类

【笔记】顺利通过EMC试验(16-41)-视频笔记

目录 视频链接 P1:电子设备中有哪些主要骚扰源 P2:怎样减小DC模块的骚扰 P3:PCB上的辐射源究竟在哪里 P4:怎样控制PCB板的电磁辐射 P5:多层线路板是解决电磁兼容问题的简单方法 P6:怎样处理地线上的裂缝 P7:怎样降低时钟信号的辐射 P8:为什么IO接口的处理特别重要 P9…

数据结构——用链表实现Map

目录 一、映射(Map) 二、代码实现 1.建立接口 2.方法实现 (1)映射的建立 键(key)和值(val)的建立 重写toString方法 (2)构造方法 (3&…

102.乐理基础-五线谱-高音谱号

内容参考于:三分钟音乐社 上一个内容:五线谱的构造、谱号是什么-CSDN博客 谱号一共需要学习和了解四种,如下图:要牢牢掌握的是高音谱号和低音谱号这两种,如图1所示 首先高音谱号: 它大致范围,…

yield关键字

如果是第一次遇到这个关键字,可以直接使用下文中小标题为Next的代码设置断点看一下效果 带yield的函数是一个生成器,而不再是一般意义上的一个函数。yield在函数中的功能类似于return,不同的是yield每次返回结果之后函数并没有退出&#xff…

clang--cpplint--gitlint

clang_format clang_format是什么 代码格式化工具 官网和教程 下载 sudo apt install clang sudo apt install clang-format#查看下载是否成功 clang --version 代码的构建到提交的过程: cmake .. make make test make clang_format_check cpplint cpplin…

Vue3中的ref和shallowRef、reactive和shallowReactive

一:ref、reactive简介 ref和reactive是Vue3中定义响应式数据的一种方式。ref通常用来定义基础类型数据。reactive通常用来定义复杂类型数据。 二、shallowRef、shallowReactive简介 shallowRef和shallowReactive是Vue3中定义浅层次响应式数据的方式 三、Api使用对比…

Mac中java jdk、android sdk、flutter sdk目录

1、Java JDK 目录 (1)官网下载的 Java JDK Java JDK下载官网 /Library/Java/JavaVirtualMachines(2)Android Studio下载的 Java JDK /Users/用户名/Library/Java/JavaVirtualMachines2、Android SDK 目录 /Users/用户名/Libr…

ansible处理多台机器部署基础环境

本次以多台机器需部署zabbix客户端为例: 机器先做免密互信,ansible主机上执行ssh-keygen,一路回车,然后将公钥发送给需管理的主机: ssh-copy-id rootIP 1、编辑hosts文件,添加需配置的主机IP,并测试连通…

Android10.0 SystemUI 下拉通知栏去掉左右滑动菜单

1.前言 在10.0的系统产品定制化开发中,在systemui的下拉状态栏部分,包括qspanel部分和通知栏部分,而在下拉通知栏的相关事件中, 通知栏左滑右滑都可以设置按钮等 来跳转到系统设置页面,所以产品开发需要,要求去掉通知栏通知左右滑动显示系统设置图标功能 禁止进入到系统…

Opencv(C++)学习 TBB与OPENMP的加速效果实验与ARM上的实践

背景:在某个嵌入式上的图像处理项目功能开发告一段落,进入性能优化阶段。尝试从多线程上对图像处理过程进行加速。经过初步调研后,可以从OPENMP,TBB这两块进行加速,当前项目中有些算法已采用多线程加速,这次…

FRDM‐K64F开发板 ARM Mbed 在线编译器嵌入式和物联网开发

传感器和执行器 传感器是将物理参数转换为电输出的设备。 传感器是换能器的一种。 传感器可分为模拟传感器和数字传感器。 模拟传感器以电压和电流的形式提供输出。 微控制器需要 ADC(模数转换器)读取来自模拟传感器的数据。 许多较新的传感器都是数字传…

僵尸进程以及解决办法、僵死进程有什么区别?

僵尸进程是指已经结束但父进程没有回收它的资源的进程。它们在进程表中仍占有一个位置,但不能被调度运行。僵尸进程会浪费系统的资源,如果过多,可能导致系统无法创建新的进程。僵尸进程的产生原因是父进程没有及时调用 wait 或 waitpid 函数来…

【蓝桥杯冲冲冲】[NOIP2000 提高组] 方格取数

蓝桥杯备赛 | 洛谷做题打卡day19 文章目录 蓝桥杯备赛 | 洛谷做题打卡day19[NOIP2000 提高组] 方格取数题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 提示题解代码我的一些话 [NOIP2000 提高组] 方格取数 题目背景 NOIP 2000 提高组 T4 题目描述 设有 N N…