news 2026/5/1 6:02:28

Linux I/O多路复用技术详解:Select、Poll 和 Epoll

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux I/O多路复用技术详解:Select、Poll 和 Epoll

通俗解释:I/O多路复用三剑客

生活中的比喻

想象你在经营一个快递驿站,顾客来取快递:

1. Select - 传统方法(挨个问)

// 就像你每隔一段时间就问每个顾客:while(true){for(每个顾客){问:"有你的快递吗?"}// 处理有快递的顾客}

特点:

  • 效率低:不管有没有快递,每个人都要问一遍
  • 人数限制:最多只能服务1024个顾客(FD_SETSIZE限制)
  • 开销大:每次都要重新准备名单

2. Poll - 改进版(填表格)

// 顾客先填好表格放在桌上,你只需要检查表格structpoll{int顾客编号;short事件;// "有快递"、"要寄件"};while(true){扫描所有表格();// 扫描所有顾客的表格// 处理有事件的顾客}

改进:

  • 无人数限制:表格可以无限长(链表结构)
  • 稍微高效:但还是要扫描所有人

3. Epoll - 智能系统(叫号机)

// 安装了一套智能系统:1.顾客进门先登记(epoll_ctl)2.有快递时,系统自动亮灯通知(epoll_wait只返回有事件的)3.你只需要处理亮灯的顾客// 系统还有两种工作模式:// LT模式:快递没取走,灯一直亮(反复通知)// ET模式:快递来了只闪一下灯,取不走就要自己负责

技术对比表

特性SelectPollEpoll
最大连接数1024无限制无限制
工作效率O(n),每次都扫描所有O(n),扫描所有O(1),只通知有事件的
内存拷贝每次都要复制所有fd每次都要复制所有fd只复制就绪的fd
触发方式水平触发水平触发水平/边缘触发
内核支持所有系统所有系统仅Linux 2.6+
使用复杂度简单中等较复杂

现实场景比喻

场景:学校食堂打饭

Select方式:

  • 食堂阿姨每隔5分钟就大喊:“要打饭的同学举手!”
  • 所有人都要回应,不管饿不饿
  • 最多只能服务1024个学生

Poll方式:

  • 每个人发一张卡片,饿了就翻到"饿"的一面
  • 阿姨还是需要看所有人的卡片
  • 但可以服务全校学生

Epoll方式:

  • 安装智能系统,学生饿了按按钮
  • 系统只告诉阿姨哪些学生按了按钮
  • 阿姨直奔这些学生,效率最高

代码直观对比

// Select:查询1000个连接fd_set readfds;FD_ZERO(&readfds);for(i=0;i<1000;i++){FD_SET(fds[i],&readfds);// 所有连接加入集合}select(1001,&readfds,NULL,NULL,NULL);// 内核遍历1000个// 应用层再遍历1000个找就绪的// Poll:也是遍历1000个structpollfdfds[1000];poll(fds,1000,-1);// 内核遍历1000个// 应用层再遍历1000个// Epoll:只处理就绪的intepfd=epoll_create(1000);// 创建红黑树+就绪链表epoll_ctl(epfd,EPOLL_CTL_ADD,fd,&ev);// 注册到红黑树epoll_wait(epfd,events,1000,-1);// 只返回就绪的,可能就几个// 直接处理返回的几个events

核心机制图解

Select/Poll:

用户态 内核态 ↓ ↓ [1,2,3...1000] → 遍历所有 → [1,5,7] // 返回就绪的 ↑ ↑ 复制所有 复制就绪的

Epoll:

用户态 内核态 ↓ ↓ 注册fd到红黑树 → 等待事件 → 就绪链表 ← 事件发生 ↑ ↑ 只复制就绪fd 只检查就绪链表

选择建议

  1. 小型项目/跨平台:用Select(简单通用)
  2. 中型项目:用Poll(连接数多但并发不高)
  3. 高性能服务器:用Epoll(Linux下必备)
  4. Windows平台:用IOCP(Windows的"Epoll")
  5. Mac/BSD:用Kqueue(Unix的"Epoll")

一句话总结

  • Select:全村广播找人
  • Poll:点名册逐个点名
  • Epoll:微信通知,谁有事@你

就像从"挨家挨户敲门"进化到"手机智能推送",Epoll让服务器知道谁有事要处理,而不是盲目地问所有人有没有事

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 3:40:04

人生死机了?别慌,这是系统升级

《解锁真正的自我:一场深入内心的成长之旅》专栏 系列四:穿越转折之谷 第1篇 转折期的三阶段:如何体面地“结束”与“重生”? —— 在人生死机后,优雅地完成一次系统重装 面对生活的突然停摆,别急着重启,先让系统“散热”一会儿。 凌晨三点的“蓝屏”时刻 凌晨三点…

作者头像 李华
网站建设 2026/4/25 18:03:08

气电联合需求响应下的综合能源配网系统协调优化运行:基于凸优化与混合整数二阶锥规划模型的求解方法

考虑气电联合需求响应的 气电综合能源配网系统协调优化运行 该文提出气电综合能源配网系统最优潮流的凸优化方法&#xff0c;即利用二阶锥规划方法对配电网潮流方 程约束进行处理&#xff0c;并提出运用增强二阶锥规划与泰勒级数展开相结合的方法对天然气潮流方程约束进行处理&…

作者头像 李华
网站建设 2026/5/1 4:43:43

AI写论文不用愁!4款AI论文写作工具,快速产出高质量毕业论文

你是否还在为撰写期刊论文、毕业论文或者职称论文而感到烦恼&#xff1f;在人工写作的过程中&#xff0c;面对纷繁复杂的文献&#xff0c;真的像大海捞针&#xff0c;而规定的格式要求又让人心烦意乱&#xff0c;不停的修改只会加大你的焦虑&#xff0c;导致工作效率低下&#…

作者头像 李华
网站建设 2026/4/23 20:02:13

AI专著撰写神器推荐,功能强大操作简便,快速完成专著创作

撰写学术专著的困境与解决方案 撰写学术专著的挑战&#xff0c;不仅在于能否“写出来”&#xff0c;更在于“能否成功出版&#xff0c;被认可”。在出版市场中&#xff0c;学术专著的受众相对较少&#xff0c;出版社对选题的学术价值和作者的学术声望有着严格的要求&#xff0…

作者头像 李华
网站建设 2026/4/24 3:18:15

基于深度学习的手势图像识别处理系统完整源码+数据集+项目报告+项目PPT全套(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于深度学习的手势图像识别处理系统完整源码数据集项目报告项目PPT全套(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 用Python语言实现&#xff0c;深度学习和图像处理技术&#xff0c;CNN卷积神经网络

作者头像 李华
网站建设 2026/4/23 15:44:11

提升衣品有技巧,学会“8个”穿搭思路,普通人也能穿出高级感

ysl包包价格 穿衣有道&#xff0c;才是快速变美的关键。每天都在穿衣&#xff0c;但你真的懂搭配吗&#xff1f; 同样的衣服、相似的款式&#xff0c;不一样的搭配手法、呈现出来的效果却大相径庭。 万变不离其宗&#xff0c;只要学会了穿搭小技巧&#xff0c;就可以以不变应万…

作者头像 李华