当前位置: 首页 > news >正文

学习嵌入式的第三十二天-数据结构-(2025.7.24)IO多路复用

IO多路复用定义

单线程或单进程同时监测若干个文件描述符(套接字)是否可以执行IO操作的能力。


作用

应用程序通常需要处理来自多条事件流中的事件,例如:

  • 电脑需要同时处理键盘鼠标输入、中断信号等。
  • Web服务器(如Nginx)需同时处理来自多个客户端的事件。

逻辑控制流在时间上的重叠称为并发
并行指物理上同时执行多任务。

CPU单核同一时刻只能处理一件事,时分复用是常见解决方案:将CPU切割为时间片,不同事件流交替执行。线程或进程表示执行流,通过操作系统调度实现时分复用,使多个事件流看似并行。


并发处理的成本

  • 线程/进程创建成本高。
  • CPU切换线程/进程需上下文切换(页表、寄存器、缓存)。
  • 多线程存在资源竞争问题。

IO多路复用提供单线程/进程中处理多事件流的方法,核心目标是用更少资源完成更多任务


IO模型

  1. 阻塞IO:线程闲等待,主动让出CPU。
  2. 非阻塞IO:线程忙等待,反复检测IO状态(如fcntl设置O_NONBLOCK)。
  3. 并发IO:多进程/线程处理,资源消耗较大。
  4. 多路IO:单进程/线程处理多个阻塞IO(如selectepoll)。

IO多路复用是操作系统提供的IO事件检测机制。


select实现步骤

  • 创建集合:fd_set定义变量。
  • 添加关注的文件描述符:FD_SET()
  • 调用select等待IO事件(读/写)。
  • 通过FD_ISSET()检查就绪的fd并操作。
  • 清除标志位:rd_set = temp_set

epoll实现步骤

  • 创建集合:epoll_create
  • 添加关注的文件描述符:epoll_ctl
  • 调用epoll_wait等待IO事件,就绪的fd存入rev集合。
  • rev集合中直接操作就绪的fd。

select与epoll对比

特性selectepoll
最大fd数量1024通常支持>5000
检测方式轮询所有fd事件驱动(主动上报)
就绪fd查找遍历原始集合(含未就绪fd)直接操作rev集合(仅就绪fd)
http://www.lryc.cn/news/601061.html

相关文章:

  • 数组内存学习
  • 英语听力口语词汇-8.美食类
  • VisionPro系列讲解 - 03 Simulator 模拟器使用
  • 20250726-4-Kubernetes 网络-Service DNS名称解析_笔记
  • MGER实验
  • selenium自动化鼠标和键盘操作
  • 幸福网咖订座点餐小程序的设计与实现
  • Compose笔记(三十八)--CompositionLocal
  • VS Code + LaTeX 绘制电气图完全指南(含 PlantUML 样式参考)
  • 酒店智能门锁SDK新V门锁系统接口函数[2025版]Delphi 7.0——东方仙盟硬件接口库
  • 方正小标宋简3.0,可编辑
  • Python - 100天从新手到大师 - Day6
  • 【科研绘图系列】R语言绘制误差连线散点图
  • freeRTOS 静态创建任务
  • FastAPI入门:安装、Pydantic、并发和并行
  • Day04–链表–24. 两两交换链表中的节点,19. 删除链表的倒数第 N 个结点,面试题 02.07. 链表相交,142. 环形链表 II
  • TCP如何解决网络切换问题
  • Java模块化编程深度指南:从过程式到面向对象的进化之路
  • JavaSE:初识数组
  • 小架构step系列26:Spring提供的validator
  • 详细介绍MySQL的索引类型
  • Maven之依赖管理
  • 基于tk界面库的扩展类
  • 网络:基础概念
  • nacos启动报错:Unable to start embedded Tomcat。
  • 基于POD和DMD的压气机叶片瞬态流场分析与神经网络预测
  • iview: 对输入框进行Poptip 换行提示
  • 【Redis】 Redis 基础命令和原理
  • 从治理到共情——平台伦理的乡村共建之路
  • 数据空间技术在智慧水库管理平台中的赋能