当前位置: 首页 > 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.xdnf.cn/news/1192843.html

相关文章:

  • 开发者说|RoboTransfer:几何一致视频世界模型,突破机器人操作泛化边界
  • 1. Qt多线程开发
  • SpringMVC——建立连接
  • OpenFeign-远程调用
  • 计算机中的数据表示
  • Windows Server系统安装JDK,一直卡在“应用程序正在为首次使用作准备,请稍候”
  • Java程序员学从0学AI(六)
  • 框架式3D打印机结构设计cad【9张】三维图+设计说明书
  • openmv特征点检测
  • 如何使用Anaconda(miniconda)和Pycharm
  • Java 大视界 -- Java 大数据在智能安防视频监控系统中的视频语义理解与智能检索进阶(365)
  • x86汇编语言入门基础(三)汇编指令篇5 串操作
  • Windows11下和Vmware中的Ubuntu22.04设置samba服务遇到的一个问题- valid users和guest设置冲突
  • 零基础学习性能测试第三章:jmeter构建性能业务场景
  • java网络请求工具类HttpUtils
  • 智慧水库管理系统中标签工厂的建立方案
  • HTTP 协议的基本格式和 fiddler 的用法
  • PHP语法高级篇(六):面向对象编程
  • 可调谐激光器原理与设计 【DFB 与 DBR 激光器剖析】
  • 详解力扣高频SQL50题之1141. 查询近30天活跃用户数【简单】
  • 【区块链安全】DeFi协议安全漏洞深度分析:从闪电贷攻击到MEV套利
  • Nuxt 4:前端开发的全新篇章
  • java集合框架面试点(2)
  • 【C语言进阶】程序环境和预处理
  • 各种前端框架界面
  • HighlightingSystem
  • 精密全波整流电路(四)
  • Linux 如何统计系统上各个用户登录(或者登出)记录出现的次数?
  • python 检测蜂窝网络,实现掉网自动拨号
  • 自定义定时任务功能详解