news 2026/4/18 14:31:36

【Linux】五种IO模型与非阻塞IO

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Linux】五种IO模型与非阻塞IO

Linux 五种 IO 模型 + 非阻塞 IO 的完整梳理
(2025-2026 面试/实战最常考版本)

Linux 下最经典的五种 IO 模型,几乎是所有中高级后端/网络编程面试必问内容。

序号IO 模型名称阻塞阶段进程在内核等待数据时是否阻塞?进程在数据从内核→用户缓冲区时是否阻塞?是否同步 IO?实际使用代表技术性能排序(延迟)
1阻塞式 IO(Blocking IO)等待数据到达 + 拷贝到用户缓冲区几乎所有最原始的 read/write★(最慢)
2非阻塞式 IO(Non-blocking IO)—(轮询)否(立即返回)是(数据到了才拷贝)设置 O_NONBLOCK + 循环 read★★
3IO 多路复用(IO Multiplexing)等待任意一个 fd 可读/可写是(在 select/poll/epoll 上阻塞)否(内核只通知,拷贝仍由进程发起)select / poll / epoll / kqueue★★★★
4信号驱动式 IO(Signal-driven IO)—(内核数据到达时发信号)是(收到信号后自己去 read,仍会阻塞拷贝)sigaction + SIGIO★★★(很少用)
5异步 IO(Asynchronous IO)整个过程都不阻塞否(内核完成拷贝后通知)aio_read / libaio / io_uring★★★★★(最强)

重点对比图(建议背诵的思维导图版)

是否在等待内核数据时阻塞? 是否在数据从内核→用户缓冲区时阻塞? 阻塞IO 是 是 非阻塞IO 否(轮询) 是 IO多路复用 是(阻塞在select/epoll_wait) 否 信号驱动IO 否(等信号) 是 异步IO 否 否

非阻塞 IO(Non-blocking IO)的真实使用状态(非常重要!)

// 最经典的错误写法(很多人这样写然后骂系统垃圾)while(1){intn=read(fd,buf,sizeof(buf));if(n>0)// 读到数据process(buf,n);elseif(n==0)// 连接关闭break;else{// n == -1if(errno==EAGAIN||errno==EWOULDBLOCK);// 没数据,继续轮询elseerror();}}

上面这种写法的问题

  1. CPU 占用极高(疯狂轮询)
  2. 延迟不确定(取决于你轮询的频率)
  3. 不适合大量连接(几千个 fd 就爆炸)

非阻塞 IO 的正确打开方式(2024-2026 主流做法)

非阻塞 IO 几乎从来不单独使用!!! 真正的高性能方案永远是下面这几种组合: 1. 非阻塞 + 忙轮询 → 极低延迟场景(游戏、HFT),几百个连接还能接受 2. 非阻塞 + sleep(小间隔) → 低质量方案(基本淘汰) 3. 非阻塞 + select/poll → 古老方案(几百~一千连接) 4. 非阻塞 + epoll(ET/LT) → 目前最主流方案(单线程轻松10w+连接) 5. 非阻塞 + io_uring → 2023~2026 年最强趋势(零拷贝+内核态调度)

五种模型实际项目中使用频率(2025-2026 真实分布)

占比模型典型场景代表框架/库
7080%IO多路复用(epoll)绝大部分高并发网络服务器nginx, redis, netty, libevent, libuv
1020%异步 IO(io_uring)高性能存储、网络代理、新一代服务器redis 7+, nginx with io_uring, SPDK
~5%纯阻塞 IO简单脚本、命令行工具、低并发业务大量业务代码
~2%非阻塞 + 轮询极致低延迟场景(游戏服务器、HFT)自研轮询服务器
极少信号驱动 IO几乎已被淘汰(实现复杂,收益低)基本没人用

快速记忆口诀(面试可直接说)

问你用什么模型的时候,直接甩这句话: "我们项目主要用 epoll 的 ET 模式 + 非阻塞 IO, 少量高性能存储场景正在迁移到 io_uring 异步 IO。 传统阻塞 IO 只在一些低并发工具类代码中使用。"

总结一句话

在现代高并发网络编程里,单纯的「非阻塞 IO」几乎没有生存空间,真正起作用的是「非阻塞 IO + 多路复用」或「非阻塞 IO + 异步 IO(io_uring)」。

需要我针对某个具体模型(比如 epoll ET/LT 区别、io_uring 入门实战、信号驱动的正确用法等)再展开详细讲解吗?

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

vscode的几个版本说明

Stable稳定版(蓝色版)、Insider内测版(绿色版)、Exploration探索版(橙色版)橙色版目前只提供给VSCode开发团队使用,而绿色版的核心价值在于“抢先体验前沿功能”。绿色版1.默认支持 Copilot X 全功能;2.终端增强:多面板拆分与实时预览&#x…

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

捕捉瞬息万变的电信号世界:Waverunner力科610Zi示波器深度解读

156/2558/3328产品概述:在电子工程师的实验室里,每一块电路板的心跳与脉动——那些高速流动、转瞬即逝的电信号——决定了产品的性能与成败。如何精准“看见”并理解这些复杂的信号,尤其是捕捉那些隐蔽极深、稍纵即逝的异常?力科&…

作者头像 李华
网站建设 2026/4/17 22:01:24

考虑阶梯式碳交易机制与电制氢的综合能源系统热电优化(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

考虑阶梯式碳交易机制与电制氢的综合能源系统热电优化(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码 核心算法。完整复现碳交易市场下的能源系统优化调度,包含阶梯式碳交易定价、电制氢两阶段过程(电解…

作者头像 李华
网站建设 2026/4/18 5:37:28

谷歌《Agents》白皮书揭秘AI从“能说“到“会做“的智能体革命

谷歌《Agents》白皮书介绍了AI智能体的核心概念,它是一种能自主行动的AI,由模型、推理框架和工具调用能力构成。相比传统AI,智能体能实时更新知识、管理会话状态并自主决策。通过上下文学习、检索式学习和微调学习三种方法可提升其能力。未来…

作者头像 李华
网站建设 2026/4/18 5:37:53

C++ STL | 容器适配器

C STL 中的容器适配器(Container Adapters) 容器适配器是基于现有的 STL 容器(序列容器或关联容器)通过限制接口、改变语义来实现特定数据结构的一种“适配”方式。 它们本身不是独立的容器,而是对已有容器的封装&am…

作者头像 李华