linux epoll实现分析

本文详细分析了Linux epoll的实现,包括epoll_create、epoll_ctl、epoll_wait等API的使用,阐述了边缘触发(ET)和水平触发(LT)模式的区别,以及epoll在多线程和多epoll实例下的行为。epoll通过红黑树高效管理fd,当事件发生时,通过ep_poll_callback通知epoll,然后由epoll_wait返回就绪事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

epoll的作用是进行I/O的多路复用,可以同时监听多个fd产生的事件。常结合异步处理实现单线程的高并发。在多核环境中,可以结合多线程实现负载分担。

本文主要分析一下linux epoll的实现。

API

epoll_create(int size);.

epoll_create1(int flags);

创建一个epoll实例,并返回与之关联的一个fd.这是后面我们继续使用epoll其它接口的基础。

从内核2.6.27开始,加入了一个新的epoll_create1,这个函数有一个flag参数,可以指定EPOLL_CLOEXEC标志,标识在exec之后关闭fd.

来看下创建epoll都做了些什么?

创建一个struct eventpoll结构,每个epoll使用这个结构管理其监听的所有fd以及就绪fd.

然后创建一个epoll对应的file结构,并将创建的epoll挂到file的private_data上(这是vfs的通常做法,将具体文件相关的结构挂到私有数据上).

将file结构的f_op填充为epoll实现eventpoll_fops.这样利用多态实现以后对epoll文件file的相关操作就能映射到epoll具体的实现上。

 

int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);

typedef union epoll_data {
void *ptr;
int fd;
uint32_t u32;
ui

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

self-motivation

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值