当前位置: 首页 > news >正文

epoll机制解析

一、epoll实现原理

1、实现原理

epoll通过3个方法来实现对句柄的监控操作,要深刻理解epoll,首先得了解epoll的三大关键要素:mmap、红黑树、链表。下面是epoll的框架图,如下:

mmap

epoll是通过内核与用户空间mmap同一块内存实现的。mmap将用户空间的一块地址和内核空间的一块地址同时映射到相同的一块物理内存地址(不管是用户空间还是内核空间都是虚拟地址,最终要通过地址映射映射到物理地址),使得这块物理内存对内核和对用户均可见,减少用户态和内核态之间的数据交换。

红黑树

红黑树将存储epoll所监听的句柄,注册的句柄通过红黑树来保存。epoll在实现上采用红黑树去存储所有套接字,当添加或者删除一个套接字时(epoll_ctl),都在红黑树上去处理,红黑树本身插入和删除性能比较好,时间复杂度O(logN)。

链表

一旦有事件发生,epoll就会将该事件添加到双向链表中。那么当我们调用epoll_wait时,epoll_wait只需要检查rdlist双向链表中是否有存在注册的事件,效率非常可观。这里也需要将发生了的事件复制到用户态内存中即可。

2、epoll_wait的工作流程

1)epoll_wait调用ep_poll,当rdlist为空(无就绪fd)时挂起当前进程,直到rdlist不空时进程才被唤醒
2)文件fd状态改变(buffer由不可读变为可读或由不可写变为可写),导致相应fd上的回调函数ep_poll_callback()被调用
3)ep_poll_callback将相应fd对应epitem加入rdlist,导致rdlist不空,进程被唤醒,epoll_wait得以继续执行
4)ep_events_transfer函数将rdlist中的epitem拷贝到txlist中,并将rdlist清空
5)ep_send_events函数,它扫描txlist中的每个epitem,调用其关联fd对用的poll方法。此时对poll的调用仅仅是取得fd上较新的events(防止之前events被更新),之后将取得的events和相应的fd发送到用户空间(封装在struct epoll_event,从epoll_wait返回)

3、epoll高效的本质

1)减少了对可读可写文件句柄的遍历
2)减少了用户态和内核态的文件句柄拷贝(内核直接监控句柄)
3)mmap 加速了内核与用户空间的信息传递,epoll是通过内核与用户mmap同一块内存,减少用户态与内核态数据交换
4)IO性能不会随着监听的文件描述的数量增长而下降
5)使用红黑树存储fd,以及对应的回调函数,其插入,查找,删除的性能不错

参考文档:https://www.zhihu.com/zvideo/1351542438125760512

http://www.lryc.cn/news/60327.html

相关文章:

  • 基于 SpringBoot + Vue 实现的可视化拖拽编辑的大屏项目
  • 我们为什么要写作?
  • 设计模式:创建者模式 - 建造者模式
  • String a = new String(“abc“); 创建了几个对象?String a = “abc“; 呢?
  • keepalived+nginx安装
  • 硬盘格式化工具,强烈推荐这个!
  • Python的异常捕获和处理
  • oracle学习之rownum和rowid
  • 为什么说过早优化是万恶之源?
  • 如何用 ModelScope 实现 “AI 换脸” 视频
  • 怎么样成为一名Python工程师?到底要会哪些东西?你会了多少?
  • 项目前期1.0
  • MySQL语句执行耗时分析
  • FVM链的Themis Pro(0x,f4) 5日IDO超百万美元,领Filecoin重回高点
  • 【PMP】优秀的项目经理如何做好范围管理?
  • 【Linux】 密码相关。pwconv
  • 揭秘阿里新大招:大模型只是前菜
  • 【U8+】win10/11系统注册用友U8硬加密
  • SQL Server 服务器安装配置和使用
  • Spring常见面试题汇总
  • javaEE汽车用油加油站销售管理系统servlet
  • CSS动画
  • 《花雕学AI》21:ChatGPT能否应对脑筋急转弯?逻辑推理和创造性思维的大考验!
  • 【Vue】学习笔记-列表渲染/数据监视
  • 人工标注或成过去式?SSA语义分割框架、SSA-engine自动类别标注引擎,大幅提升细粒度语义标注效率
  • 远程工具在哪里打开?使用教程
  • HBase高手之路7—HBase之全文检索Phoneix
  • 城镇水务系统碳减排路径|雨水系统
  • 摆花
  • newman结合jenkins实现自动化测试