操作系统-I/O多路复用

I/O 多路复用:

通过内核监控多个文件描述符(如 TCP 连接),当某个文件描述符就绪(如数据到达或可写)时,内核通知用户态程序进行处理。

程序无需阻塞等待每个文件描述符,而是通过一次系统调用(如 selectpollepoll)批量检查状态,减少用户态和内核态的频繁切换。

对于 TCP 连接,I/O 多路复用可以高效管理大量并发连接,避免为每个连接创建独立线程或进程,提升性能和资源利用率。

selectpollepoll 的特性对比:

特性 select poll epoll
文件描述符数量 通常限制为 1024(FD_SETSIZE) 无限制 无限制
效率 每次调用需要遍历所有文件描述符 每次调用需要遍历所有文件描述符 仅返回就绪的文件描述符
触发模式 仅支持水平触发(LT) 仅支持水平触发(LT) 支持水平触发(LT)和边缘触发(ET)
适用场景 文件描述符数量较少 文件描述符数量较少 文件描述符数量较多
可移植性 跨平台 跨平台 Linux 特有
API 复杂度 简单 较简单 较复杂
内存开销 固定大小(FD_SETSIZE) 动态分配(pollfd 数组) 动态分配(内核维护)
性能 低效(线性扫描) 低效(线性扫描) 高效(事件驱动)
相关推荐
古希腊数通小白(ip在学)1 小时前
stp拓扑变化分类
运维·服务器·网络·智能路由器
Muxiyale2 小时前
使用spring发送邮件,部署ECS服务器
java·服务器·spring
l1x1n03 小时前
Vim 编辑器常用操作详解(新手快速上手指南)
linux·编辑器·vim
FreeBuf_4 小时前
微软365 PDF导出功能存在本地文件包含漏洞,可泄露敏感服务器数据
服务器·microsoft·pdf
lixzest5 小时前
C++ Lambda 表达式详解
服务器·开发语言·c++·算法
ajassi20005 小时前
开源 python 应用 开发(三)python语法介绍
linux·python·开源·自动化
o不ok!5 小时前
Linux面试问题-软件测试
linux·运维·服务器
DaxiaLeeSuper5 小时前
Prometheus+Grafana+node_exporter监控linux服务器资源的方案
linux·grafana·prometheus
尽兴-6 小时前
如何将多个.sql文件合并成一个:Windows和Linux/Mac详细指南
linux·数据库·windows·sql·macos
kfepiza6 小时前
Netplan 中 bridges、bonds、ethernets、vlans 之间的关系 笔记250711
linux·tcp/ip·shell