IO模型(epoll)--详解-03

写在前面

  epoll是开发linux高性能服务器的必备技术至,epoll本质,是服务端程序员的必须掌握的知识。

七、epoll的原理和流程

  本节会以示例和图表来讲解epoll的原理和流程。

创建epoll对象

  如下图所示,当某个进程调用epoll_create方法时,内核会创建一个eventpoll对象(也就是程序中epfd所代表的对象)。eventpoll对象也是文件系统中的一员,和socket一样,它也会有等待队列。内核创建eventpoll对象

 

 

   创建一个代表该epoll的eventpoll对象是必须的,因为内核要维护“就绪列表”等数据,“就绪列表”可以作为eventpoll的成员。

维护监视列表

  创建epoll对象后,可以用epoll_ctl添加或删除所要监听的socket。以添加socket为例,如下图,如果通过epoll_ctl添加sock1、sock2和sock3的监视,内核会将eventpoll添加到这三个socket的等待队列中。添加所要监听的socket

 

 

   当socket收到数据后,中断程序会操作eventpoll对象,而不是直接操作进程。

接收数据

  当socket收到数据后,中断程序会给eventpoll的“就绪列表”添加socket引用。如下图展示的是sock2和sock3收到数据后,中断程序让rdlist引用这两个socket。给就绪列表添加引用

 

   

  eventpoll对象相当于是socket和进程之间的中介,socket的数据接收并不直接影响进程,而是通过改变eventpoll的就绪列表来改变进程状态。

  当程序执行到epoll_wait时,如果rdlist已经引用了socket,那么epoll_wait直接返回,如果rdlist为空,阻塞进程。

阻塞和唤醒进程

  假设计算机中正在运行进程A和进程B,在某时刻进程A运行到了epoll_wait语句。如下图所示,内核会将进程A放入eventpoll的等待队列中,阻塞进程。epoll_wait阻塞进程

 

 

  当socket接收到数据,中断程序一方面修改rdlist,另一方面唤醒eventpoll等待队列中的进程,进程A再次进入运行状态(如下图)。也因为rdlist的存在,进程A可以知道哪些socket发生了变化。epoll唤醒进程

 

 

八、epoll的实现细节

至此,相信读者对epoll的本质已经有一定的了解。但我们还留有一个问题,eventpoll的数据结构是什么样子?

再留两个问题,就绪队列应该应使用什么数据结构?eventpoll应使用什么数据结构来管理通过epoll_ctl添加或删除的socket?

 如下图所示,eventpoll包含了lock、mtx、wq(等待队列)、rdlist等成员。rdlist和rbr是我们所关心的。

 

 

就绪列表的数据结构

  就绪列表引用着就绪的socket,所以它应能够快速的插入数据。

  程序可能随时调用epoll_ctl添加监视socket,也可能随时删除。当删除时,若该socket已经存放在就绪列表中,它也应该被移除。

  所以就绪列表应是一种能够快速插入和删除的数据结构。双向链表就是这样一种数据结构,epoll使用双向链表来实现就绪队列(对应上图的rdllist)。

索引结构

  既然epoll将“维护监视队列”和“进程阻塞”分离,也意味着需要有个数据结构来保存监视的socket。至少要方便的添加和移除,还要便于搜索,以避免重复添加。红黑树是一种自平衡二叉查找树,搜索、插入和删除时间复杂度都是O(log(N)),效率较好。epoll使用了红黑树作为索引结构(对应上图的rbr)。

 

ps:因为操作系统要兼顾多种功能,以及由更多需要保存的数据,rdlist并非直接引用socket,而是通过epitem间接引用,红黑树的节点也是epitem对象。同样,文件系统也并非直接引用着socket。为方便理解,本文中省略了一些间接结构。

九、结论

epoll在select和poll(poll和select基本一样,有少量改进)的基础引入了eventpoll作为中间层,使用了先进的数据结构,是一种高效的多路复用技术。

再留一点作业!

下表是个很常见的表,描述了select、poll和epoll的区别。读完本文,读者能否解释select和epoll的时间复杂度为什么是O(n)和O(1)?

 

 

转载于:https://www.cnblogs.com/chihirotan/p/11521068.html

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

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

相关文章

机器学习重新构想计算的构建块

来源:ScienceAI编辑:绿萝传统算法为机器学习等复杂的计算工具提供动力。一种称为「预测算法」的新方法利用机器学习的力量来改进算法。算法——允许程序对数据进行排序、过滤和组合等的代码块——是现代计算的标准工具。就像手表里的小齿轮一样&#xff…

js实现模糊查询

1、使用indexOf 2、使用match 3、使用test 4、使用stringObject.split(),字符串分割方法&#xff0c;如果字符串可以被分割说明含有这个字符串 <html><head><title>test</title></head><body><input type"text" id"btn&…

丘成桐谈几何:从黎曼、爱因斯坦到弦论

来源 &#xff1a; 超级数学建模著名数学家丘成桐先生发表了题为“几何&#xff1a;从黎曼、爱因斯坦到弦论”的演讲&#xff0c;追溯了为广义相对论发展奠定基础的的黎曼几何&#xff0c;回顾了影响广义相对论发展的物理学突破&#xff0c;并谈及量子力学和引力理论相结合、引…

图卷积网络的五年

来源&#xff1a;ScienceAI作者&#xff1a;Mostafa Haghir Chehreghani编辑&#xff1a;萝卜皮图卷积网络&#xff08;Graph Convolutional Networks&#xff0c;GCN&#xff09;已成为使用图和网络进行学习的流行工具。我们应该反思一下成功故事背后的原因。论文链接&#xf…

【前沿技术】“中国天眼”观测到宇宙极端爆炸起源证据

来源&#xff1a;智能研究院据新华网报道&#xff0c;我国科研团队通过“中国天眼”FAST观察并计算出快速射电暴的起源证据&#xff0c;这一发现于18日刊登于国际权威学术期刊《科学》杂志。中国科学院国家天文台研究员、“中国天眼”首席科学家李菂介绍&#xff0c;快速射电暴…

红黑树存在的合理性

写在前面 主要描述为什么有了二叉查找树/平衡树还需要红黑树 1、二叉查找树的缺点 二叉查找树&#xff0c;相信大家都接触过&#xff0c;二叉查找树的特点就是左子树的节点值比父亲节点小&#xff0c;而右子树的节点值比父亲节点大&#xff0c;如图 基于二叉查找树的这种特点&a…

认清智能化战争的制胜根本

来源&#xff1a;中国军网作者&#xff1a;石海明、裴帅在战争领域&#xff0c;如果说有什么是亘古不变的真理&#xff0c;那就是“变化”。伴随着前沿智能科技的飞速发展&#xff0c;智能化时代扑面而来&#xff0c;智能化战争也初露端倪&#xff0c;冲击着人们对战争的原有认…

DeepMind的AI能指导人类的直觉吗?

来源&#xff1a;AI前线作者&#xff1a;Ben Dickson译者&#xff1a;Sambodhi策划&#xff1a;凌敏DeepMind 研究人员最近发表了一篇题为《通过用人工智能引导人类直觉来推进数学》&#xff08;Advancing mathematics by guiding human intuition with AI&#xff09;的论文&a…

NoSQL那些事--Redis

Redis是个流行的内存数据库(in-momery)。接口好用&#xff0c;性能也很强&#xff0c;还支持多种数据结构&#xff0c;加上各种高可用性集群方案&#xff0c;实在是太太太好用了。 但是就是因为太好用了&#xff0c;好用到让很多人都晕了脑子&#xff1a; 用Redis性能就大大提高…

柳昀哲课题组在Nature Reviews Neuroscience上发表长篇综述提出表征富集理论

来源&#xff1a;北师大脑与认知科学“读心解梦”一直以来是人们追求的梦想&#xff0c;从佛洛依德对于潜意识意义的追寻&#xff0c;到当今神经科学的神经信号解码&#xff0c;人们采用主观或客观的方式理解人类高级智能的脚步从未停止。早期人们理解人类意识的内涵&#xff0…

Excel生成Sql语句 格式如:=字符串1A2字符串2C2字符串3

我们有时候需要根据Excel生成sql语句&#xff0c;可以利用Excel的字符串拼接&。格式如&#xff1a;"字符串1"&A2&"字符串2"&C2&"字符串3" 例如&#xff1a;在一个Excel中&#xff0c;我们要在Data_Company表中&#xff0c;根…

诺奖10年,干细胞领域再突破!华大单细胞技术助力获得人类体外诱导全能干细胞...

来源&#xff1a;生物探索题图来源&#xff1a;The Baltimore Sun排版&#xff1a;文竞择近日&#xff0c;中国科学院和深圳华大生命科学研究院等多家机构的研究者&#xff0c;通过体细胞诱导培养出了类似受精卵发育3天状态的人类全能干细胞&#xff0c;这是目前全球在体外培养…

Django - 模板相关

一.MVC和MTV 1. MVC M: Model : 数据库, 存取数据 V: View: 视图, 信息的展示 C: Controller: 控制器, 逻辑的控制, 负责调度, 传递指令 2. MTV M: model: ORM操作 T: Template: 模板, HTML V: View: , 视图, 业务逻辑相关 二. 变量 {{变量名}} 由字母和下划线组成 (.) def te…

低代码公司黑帕云被字节跳动收购:潮水褪去,曾经爆火的低代码赛道迎来变局?...

来源&#xff1a;AI前线作者&#xff1a;凌敏曾经站在风口的低 / 无代码创业&#xff0c;如今风光不再&#xff1f;低代码公司黑帕云宣布停服&#xff0c;创始人入职飞书3 月 20 日&#xff0c;低 / 无代码创业公司黑帕云宣布&#xff0c;公司将于 2022 年 5 月 31 日停止服务&…

秒懂系列 | 史上最简单的Python Django入门教程

http://www.cnblogs.com/baiboy/p/django1.html 摘要&#xff1a;Django的学习教程也是分门别类&#xff0c;形式不一。或是较为体系的官方文档&#xff0c;或者风格自由的博客文档&#xff0c;或者偏向实例的解析文档。即使官方文档&#xff0c;章节较多&#xff0c;文字阐述累…

清华大学和MIT研究人员使用DeepMind的AlphaFold方法来增强COVID-19抗体

来源&#xff1a;ScienceAI编辑&#xff1a;绿萝利用 DeepMind 先进的蛋白质知识&#xff0c;清华大学的科学家们设计出能够抵抗 COVID-19 免疫逃逸的突变单克隆抗体。2020 年底&#xff0c;AlphaFold 2 的问世震惊了结构生物学界&#xff0c;AlphaFold 2 是谷歌人工智能部门 D…

【秒懂】号称最为简明实用的Django上手教程

https://www.cnblogs.com/baiboy/p/django1.html 阅读目录 1 几个基本概念 2 Django配置准备3 Django基础配置安装摘要&#xff1a;Django的学习教程也是分门别类&#xff0c;形式不一。或是较为体系的官方文档&#xff0c;或者风格自由的博客文档&#xff0c;或者偏向实例的解…

马斯克:今年占全球发射质量65%,星舰5月或首次轨道试飞

来源&#xff1a;澎湃新闻 作者&#xff1a;张静 马斯克透露&#xff0c;星舰有望5月开展首次轨道飞行测试&#xff0c;SpaceX计划今年的发射占全球发射质量的65%左右&#xff0c;“粗略计算是16吨*50次发射800吨。”3月22日&#xff0c;马斯克在社交媒体上表示&#xff0c;星舰…

spring boot 配置文件加密数据库用户名/密码

这篇文章为大家分享spring boot的配置文件properties文件里面使用经过加密的数据库用户名密码&#xff0c;因为在自己做过的项目中&#xff0c;有这样的需求&#xff0c;尤其是一些大公司&#xff0c;或者说上市公司&#xff0c;是不会把这些敏感信息直接透露给你&#xff0c;尤…

菲利普·安德森:凝聚态物理的艺术家

来源&#xff1a;集智俱乐部作者:Andrew Zangwill 译者:董唯元 审校:梁金 编辑:邓一雪 导语物理学家P.W.安德森&#xff08;Philip Anderson&#xff09;因无序和磁性材料方面的工作获得1977年诺贝尔物理学奖&#xff0c;但这并不足以彰显他的贡献。他推动多体理论与固体物理的…