千家信息网

多路复用IO实现方式:select,poll,epoll的区别

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,三种多路复用IO实现方式:select,poll,epoll的区别直接看表:以下内容转载于:http://watter1985.iteye.com/blog/1614039以上文章内部有select/
千家信息网最后更新 2026年11月01日多路复用IO实现方式:select,poll,epoll的区别

三种多路复用IO实现方式:select,poll,epoll的区别

直接看表:



以下内容转载于:http://watter1985.iteye.com/blog/1614039

以上文章内部有select/poll/epoll的具体实现。

内核调用总结:

poll/select/epoll的实现都是基于文件提供的poll方法(f_op->poll),
该方法利用poll_table提供的_qproc方法向文件内部事件掩码_key对应的的一个或多个等待队列(wait_queue_head_t)上添加包含唤醒函数(wait_queue_t.func)的节点(wait_queue_t),并检查文件当前就绪的状态返回给poll的调用者(依赖于文件的实现)。
当文件的状态发生改变时(例如网络数据包到达),文件就会遍历事件对应的等待队列并调用回调函数(wait_queue_t.func)唤醒等待线程。


poll 和 select

poll和select的实现基本上是一致的,只是传递参数有所不同,他们的基本流程如下:

1. 复制用户数据到内核空间

2. 估计超时时间

3. 遍历每个文件并调用f_op->poll 取得文件当前就绪状态, 如果前面遍历的文件都没有就绪,向文件插入wait_queue节点

4. 遍历完成后检查状态:

a). 如果已经有就绪的文件转到5;

b). 如果有信号产生,重启poll或select(转到 1或3);

c). 否则挂起进程等待超时或唤醒,超时或被唤醒后再次遍历所有文件取得每个文件的就绪状态

5. 将所有文件的就绪状态复制到用户空间

6. 清理申请的资源


公共函数

下面是poll/select公用的一些函数,这些函数实现了poll和select的核心功能。

poll_initwait 用于初始化poll_wqueues,

__pollwait 实现了向文件中添加回调节点的逻辑,

pollwake 当文件状态发生改变时,由文件调用,用来唤醒线程,

poll_get_entry,free_poll_entry,poll_freewait用来申请释放poll_table_entry 占用的内存,并负责释放文件上的wait_queue节点。

其中,poll,select对poll_table_entry的申请和释放采用的是类似内存池的管理方式,先使用预分配的空间,预分配的空间不足时,分配一个内存页,使用内存页上的空间。

流程图:

epoll而言:

递归深度检测(ep_call_nested)

循环检测(ep_loop_check)

唤醒风暴检测(reverse_path_check)

流程图:

文件 状态 函数 空间 内存 节点 方法 流程 分配 检测 方式 事件 内核 数据 流程图 用户 线程 队列 检查 多路 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 哈尔滨大商圈互联网科技有限公司 科技与互联网发展 互联网 的科技创新 云电互联网科技 丰台科技园 互联网 北京禾田雨橡互联网科技 互联网 视角下的科技创新 广州紫鲸互联网科技 多迪互联网科技有限公司 青岛中康互联网医疗科技有限公司 荆州市昕露互联网络科技有限公司 互联网科技人工智能实验室 爱医互联网络科技 用友工业互联网科技发展 徐州市互联网科技有限公司 恒生互联网科技业指数调整周期 中国互联网有什么科技 上海乐五互联网科技有限公司 广西科技产业互联网是什么 第三届互联网大会安防黑科技 互联网与科技 互联网科技财经 没上市的科技互联网公司 茂名市互联网科技产业园 卓翼科技产业互联网合作 保险科技服务互联网营销体系 下一代互联网重大应用科技园 易企秀互联网科技是做什么的 互联网科技的前景 亚光科技低轨卫星互联网
0