epoll 接口以及原理说明
零、实例代码: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 接口以及原理说明相关推荐
- epoll 的实现原理以及与poll,select 的对比
最近面试的时候 被问到epoll的问题,就下来查一查,看到有篇文章不错,就记录下来,供大家参考学习. 以一个生活中的例子来解释. 假设你在大学中读书,要等待一个朋友来访,而这个朋友只知道你在A号楼,但 ...
- epoll为什么这么快,epoll的实现原理
这是我看过的最通俗易懂的关于epoll的讲解: 一.为什么epoll这么快: epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,在开始讨论这 ...
- epoll的实现原理
epoll的实现原理 前言 epoll的数据结构 多种数据结构进行决策 红黑树和就绪队列的关系 协议栈如何与epoll模块通信 epoll的工作环境 协议栈触发回调通知epoll的时机 通知的时机总结 ...
- IM开发基础知识补课(一):正确理解前置HTTP SSO单点登陆接口的原理
1.前言 一个安全的信息系统,合法身份检查是必须环节.尤其IM这种以"人"为中心的社交体系,身份认证更是必不可少. 一些PC时代小型IM系统中,身份认证可能直接做到长连接中(也就是 ...
- epoll背后的原理
1 简介 Epoll 是个很老的知识点,是后端工程师的经典必修课.这种知识具备的特点就是研究的人多,所以研究的趋势就会越来越深.当然分享的人也多,由于分享者水平参差不齐,也产生的大量错误理解. 今天我 ...
- IM开发基础知识补课:正确理解前置HTTP SSO单点登陆接口的原理
1.前言 一个安全的信息系统,合法身份检查是必须环节.尤其IM这种以"人"为中心的社交体系,身份认证更是必不可少. 一些PC时代小型IM系统中,身份认证可能直接做到长连接中(也就是 ...
- Golang interface 接口详细原理和使用技巧
文章目录 Golang interface 接口详细原理和使用技巧 一.Go interface 介绍 interface 在 Go 中的重要性说明 interface 的特性 interface 接 ...
- 股票交易接口开发原理是什么?
股票交易接口开发只需要通过第三方证券公司完成交易,也或者是个人与机构做私募量化也是可以的.但是最近小编就有注意到,在此之前的一些股票交易接口已经完成了再次升级.那么,股票交易接口开发原理是什么? 先来 ...
- 华为网络--Hybrid接口工作原理与实验
文章目录 前言: 一.华为交换机基本配置 1.1 交换机设备创建.删除VLAN 1.2 设置接口类型 1.2.1 设置access类型 1.2.2 设置Trunk类型 1.3 华为交换机日常维护查看命 ...
最新文章
- 设A和B是两个按元素值递增有序的单链表,写一算法将A和B归并为按按元素值递减有序的单链表C,试分析算法的时间复杂度。(利用上篇带有头结点的线性链表操作)...
- 【sprinb-boot】配置和lib分离打包
- “雪崩”崩了 欧洲国际刑警组织捣毁大规模恶意软件管理平台
- iteritems()与items()
- 如果你20秒钟还看不懂这个短信的话,说明你还纯洁!?
- java实现权重随机算法
- Dive Into Thrift Node-安装
- (15)System Verilog结构体struct详解
- Windows Server2016+SQL Server 2016 Cluster安装及配置
- apache 版本_Apache官宣!ShardingSphere首个Apache版本发布
- ActivityManager: Warning: Activity not started,...
- Radon 变换原理和应用
- ubuntu将主文件夹的文件夹中文名称改为英文
- 咋么用计算机打出,键盘怎么输入符号_怎么用电脑键盘打符号-win7之家
- 求一个整数的各个位数
- PAT-2019年冬季考试-甲级-7-1 Good in C (20分)超详解,几招就满分通过
- php实现简单微信支付(提供商户微信)
- (多线程优化)爬取京东笔记本电脑销量榜data-sku(商品id),并存入云服务器中的mysql库(爬取时间较上一版提升十多倍)
- MarkDown超级教程 Obsidian版 2022.1.12
- 重磅!腾讯助推十亿级节点图计算进入分钟级时代;沈向洋离开微软;阿里:拥有超6000项已授权专利,涉及云、AI等领域……...