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让服务器知道谁有事要处理,而不是盲目地问所有人有没有事

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1178436.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【小程序毕设全套源码+文档】基于微信小程序的上门做菜预定服务平台设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

深入解析:【JavaSE】十九、JVM运行流程 类加载Class Loading

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

2026年求推荐靠谱的AI智能办公鼠标,南方网通鸿容鼠标别错过 - 工业品牌热点

2026年AI技术深度融入办公与营销场景,AI智能办公鼠标作为轻量级生产力入口,已成为企业降本增效、个人高效创作的关键工具。无论是五合一大模型集成的全场景适配,还是办公营销双功能覆盖的便捷性,优质AI智能办公鼠标…

四边形不等式相关

四边形不等式相关四边形不等式 我们称一个二元函数 \(w(i, j)\) 满足四边形不等式,当且仅当对于任意 \(a \le b \le c \le d\) 满足: \[w(a, c) + w(b, d) \le w(a, d) + w(b, c) \]即交叉小于包含。 其可以用来对转…

Tops新年赛总结

热烈祝贺拓尔思2026新年赛圆满结束! 先说一下对本次比赛的评价 这次比赛的题组的蛮好的,很符合我这种第一次正式打ACM赛制比赛(THUPC那次在摆烂不算)的蒟蒻。 同时,绿绿蓝蓝的小清新题还是很符合大家的口味的。其…

VisionMaster之上下相机对位贴合

VisionMaster之上下相机对位贴合 一 上相机对位贴合 1.1 九点标定1.2 确定基准位置1.3 旋转中心标定1.4 定位纠偏二 下相机对位贴合 1.1 九点标定 1.2 确定基准位置 1.3 旋转中心标定 1.4 定位纠偏 三 上下相机联合

总结2026年轴承老牌代理厂家,伯陆商城优势显著 - 工业品牌热点

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家标杆企业,为工业制造企业选型进口轴承及传动零部件代理伙伴提供客观依据,助力精准匹配适配的服务供应商。 TOP1 推荐:伯陆(上海)动力技术有限公司 推荐指…

2026年苏州食材配送一站式服务保障排名,旺利涛食品实力上榜! - 工业品牌热点

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家标杆企业,为长三角地区企事业单位食堂、连锁餐饮门店等B端客户选型提供客观依据,助力精准匹配适配的生鲜食材配送服务伙伴。 TOP1 推荐:苏州旺利涛食品贸易…

2026年市面上做得好的高架库企业排名,高架库/智能仓储/智能仓库/立体仓储/全自动仓库,高架库公司如何选 - 品牌推荐师

当前,制造业与物流业对仓储效率的要求持续提升,高架库凭借其空间利用率高、自动化程度强、作业效率显著等核心优势,成为企业智能化升级的重要选择。然而,市场鱼龙混杂,如何筛选技术可靠、服务优质的高架库工厂,成…

1月17号和18号总结

这两天主要熟悉整个项目的业务流程和项目结构 以及学习微服务架构的基础组件以及使用 目前整个项目已经跑通,已经熟悉代码的功能结构 这是个人人开源上的模版项目,对于之前都是自己搭建项目,所谓的大作业,老师验收…

【参数优化】基于带动态边界 + 周期性重置 + 惯性权重衰减的粒子群优化三环自动驾驶仪设计二阶 高阶控制系统的双参数控制器附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 &#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室 &#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#…

解决局域网 NAS 远程桌面连接失败:火绒“误伤”排查实录

1. 问题背景最近在访问家中的 NAS(Windows 系统)时遇到了一个诡异的问题:​故障现象:台式机通过网线尝试远程桌面连接(RDP)NAS 总是失败;切换到无线网络时,连接状态极其不稳定,时断时续。​交叉验证:手机端使…

树剖总结

树链剖分总结 一些不太可能无关紧要的事情 个人感觉树剖挺恶心的。 3K码量让我还以为在写大模拟。 调试不仅调线段树,还要调DFS和LCA 食屎寄酸罚 一些不太可能会犯的错你是怎么做到把修改函数带返回值的?首先,就是大…

Flutter 与开源鸿蒙(OpenHarmony)国际化、无障碍与合规开发实践:打造全球可用的可信应用 - 详解

Flutter 与开源鸿蒙(OpenHarmony)国际化、无障碍与合规开发实践:打造全球可用的可信应用 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block …

Invicti Standard v26.1.0 for Windows - 企业级 Web 应用与 API 安全

Invicti Standard v26.1.0 for Windows - 企业级 Web 应用与 API 安全 Invicti (formerly Netsparker) | Web Application and API Security for Enterprise 请访问原文链接&#xff1a;https://sysin.org/blog/invicti/ 查看最新版。原创作品&#xff0c;转载请保留出处。 …

课题:PLC控制的变频电梯系统的设计(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

课题&#xff1a;PLC控制的变频电梯系统的设计(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 毕业设计调研报告 可编程控制器是一种用小处理器作为核心&#xff0c;在和电脑以及互联网等东西一起开发的一种控制装置用在工业生…

聊聊专业翻译企业,天使翻译公司质量保障与服务优势有哪些? - 工业品牌热点

本榜单依托全维度市场调研与真实行业口碑,深度筛选出五家标杆翻译企业,为有语言服务需求的个人与企业提供客观依据,助力精准匹配适配的服务伙伴。 TOP1 推荐:天使(上海)外语翻译有限公司 推荐指数:★★★★★ |…

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

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

Comsol脉冲涡流无损检测仿真 图一:脉冲涡流仿真,检出电压信号 图二:脉冲涡流模型 图三:...

Comsol脉冲涡流无损检测仿真 图一&#xff1a;脉冲涡流仿真&#xff0c;检出电压信号 图二&#xff1a;脉冲涡流模型 图三&#xff1a;磁通密度模 图四&#xff1a;磁通密度模线圈贴着金属板扫过&#xff0c;检测仪突然滴滴作响——这种非接触式探伤场景在工业检测中司空见惯。…

哈希表的c++实现及其常用函数

代码示例: include include include include include<unordered_map> using namespace std; int main() { //----------1.创建哈希表:键为String类型,值为int类型---------- unordered_map<string, int>…