零、实例代码:https://github.com/xuchanglong/NtyTCP-v1.0.0-comments

一、主要接口

int epoll_create(int size);

创建 epoll 对象,创建一颗空的红黑树,一个空双向链表。

int epoll_ctl(int epid, int op, int sockid, struct epoll_event *event);

向 epoll 对象里面的红黑树中增加、删除、修改指定的节点。

int epoll_wait(int epid, struct epoll_event *events, int maxevents, int timeout);

等待双向链表中是否有节点,若有节点则取得不大于 maxevents 数量的节点并放入 events 中,最后返回。

int epoll_event_callback(struct eventpoll *ep, int sockid, uint32_t event)

有显卡驱动调用,判断当前事件(建立连接、断开连接、读写数据)对应的 socket 是否已经在红黑树中挂号,如果是,则将新的事件保存到对应的红黑树节点中并更新到双向链表中。

二、原理说明

1、上文在说明函数功能时提到了两个 epoll 核心结构:红黑树 和 双向链表 。

  • 红黑树的功能是保存待监控的 socket 以及其事件的信息。
  • 双向链表的功能是保存就绪的 socket 以及其事件的信息。

2、eventpoll 和 红黑树、双向链表的关系图如下所示:

(SAW:Game Over!)

epoll 接口以及原理说明相关推荐

  1. epoll 的实现原理以及与poll,select 的对比

    最近面试的时候 被问到epoll的问题,就下来查一查,看到有篇文章不错,就记录下来,供大家参考学习. 以一个生活中的例子来解释. 假设你在大学中读书,要等待一个朋友来访,而这个朋友只知道你在A号楼,但 ...

  2. epoll为什么这么快,epoll的实现原理

    这是我看过的最通俗易懂的关于epoll的讲解: 一.为什么epoll这么快: epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,在开始讨论这 ...

  3. epoll的实现原理

    epoll的实现原理 前言 epoll的数据结构 多种数据结构进行决策 红黑树和就绪队列的关系 协议栈如何与epoll模块通信 epoll的工作环境 协议栈触发回调通知epoll的时机 通知的时机总结 ...

  4. IM开发基础知识补课(一):正确理解前置HTTP SSO单点登陆接口的原理

    1.前言 一个安全的信息系统,合法身份检查是必须环节.尤其IM这种以"人"为中心的社交体系,身份认证更是必不可少. 一些PC时代小型IM系统中,身份认证可能直接做到长连接中(也就是 ...

  5. epoll背后的原理

    1 简介 Epoll 是个很老的知识点,是后端工程师的经典必修课.这种知识具备的特点就是研究的人多,所以研究的趋势就会越来越深.当然分享的人也多,由于分享者水平参差不齐,也产生的大量错误理解. 今天我 ...

  6. IM开发基础知识补课:正确理解前置HTTP SSO单点登陆接口的原理

    1.前言 一个安全的信息系统,合法身份检查是必须环节.尤其IM这种以"人"为中心的社交体系,身份认证更是必不可少. 一些PC时代小型IM系统中,身份认证可能直接做到长连接中(也就是 ...

  7. Golang interface 接口详细原理和使用技巧

    文章目录 Golang interface 接口详细原理和使用技巧 一.Go interface 介绍 interface 在 Go 中的重要性说明 interface 的特性 interface 接 ...

  8. 股票交易接口开发原理是什么?

    股票交易接口开发只需要通过第三方证券公司完成交易,也或者是个人与机构做私募量化也是可以的.但是最近小编就有注意到,在此之前的一些股票交易接口已经完成了再次升级.那么,股票交易接口开发原理是什么? 先来 ...

  9. 华为网络--Hybrid接口工作原理与实验

    文章目录 前言: 一.华为交换机基本配置 1.1 交换机设备创建.删除VLAN 1.2 设置接口类型 1.2.1 设置access类型 1.2.2 设置Trunk类型 1.3 华为交换机日常维护查看命 ...

最新文章

  1. 设A和B是两个按元素值递增有序的单链表,写一算法将A和B归并为按按元素值递减有序的单链表C,试分析算法的时间复杂度。(利用上篇带有头结点的线性链表操作)...
  2. 【sprinb-boot】配置和lib分离打包
  3. “雪崩”崩了 欧洲国际刑警组织捣毁大规模恶意软件管理平台
  4. iteritems()与items()
  5. 如果你20秒钟还看不懂这个短信的话,说明你还纯洁!?
  6. java实现权重随机算法
  7. Dive Into Thrift Node-安装
  8. (15)System Verilog结构体struct详解
  9. Windows Server2016+SQL Server 2016 Cluster安装及配置
  10. apache 版本_Apache官宣!ShardingSphere首个Apache版本发布
  11. ActivityManager: Warning: Activity not started,...
  12. Radon 变换原理和应用
  13. ubuntu将主文件夹的文件夹中文名称改为英文
  14. 咋么用计算机打出,键盘怎么输入符号_怎么用电脑键盘打符号-win7之家
  15. 求一个整数的各个位数
  16. PAT-2019年冬季考试-甲级-7-1 Good in C (20分)超详解,几招就满分通过
  17. php实现简单微信支付(提供商户微信)
  18. (多线程优化)爬取京东笔记本电脑销量榜data-sku(商品id),并存入云服务器中的mysql库(爬取时间较上一版提升十多倍)
  19. MarkDown超级教程 Obsidian版 2022.1.12
  20. 重磅!腾讯助推十亿级节点图计算进入分钟级时代;沈向洋离开微软;阿里:拥有超6000项已授权专利,涉及云、AI等领域……...

热门文章

  1. 输出联系变化的数字seq
  2. 解决ie7不支持after、before的方法
  3. SQL读取树型所有下级或所有上级
  4. 轻松学MVC4.0–2 创建用户列表页面
  5. python 日志打印
  6. 基于tensorflow框架的神经网络结构处理mnist数据集
  7. 中英文怎么算 字符长度_如何将混合了中英文及不同数量空格的文本,快速拆分成多列...
  8. springboot整合视图层Thymeleaf、freemarker
  9. storm后台启动命令(避免新开窗口)
  10. linux 产生0~1之间的随机数