【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 入门实战、信号驱动的正确用法等)再展开详细讲解吗?

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

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

相关文章

救命神器!8款AI论文软件测评:本科生毕业论文痛点全解决

救命神器!8款AI论文软件测评:本科生毕业论文痛点全解决 2026年AI论文工具测评:为何需要这份榜单? 随着人工智能技术的不断进步,越来越多的本科生开始依赖AI论文工具来提升写作效率和论文质量。然而,面对市场…

多模融合时代,文档数据库正在被重新定义——金仓数据库如何构建新一代文档数据底座

目录 性能对标主流:不只是可用,更要好用 对比 Oracle:文档能力同样具备竞争力 内核融合:多模能力不是“拼装”,而是原生一体 1. 企业级一致性与可靠性原生继承 2. 统一查询优化与索引体系 3. 真正的“多模一体”…

进程间通信(IPC)完全指南:原理、实现与最佳实践

进程间通信(IPC)完全指南:原理、实现与最佳实践 在2026年的操作系统与分布式系统中,进程间通信(IPC) 仍是核心机制,尤其在多核、多进程环境、多容器化(如Docker/Kubernetes&#xf…

2026国内最新爆款裤料品牌top5推荐!广东广州等地优质裤料供应商权威榜单发布,创新工艺与品质保障助力服饰产业升级 - 品牌推荐2026

2026最新爆款裤料推荐!国内优质裤料供应商权威榜单发布,创新工艺与品质保障助力服饰产业升级 广州/广东爆款裤料服务公司推荐 引言 随着快时尚产业迭代加速与消费需求个性化升级,服饰品牌对裤装面料的功能性、定制灵…

亲测好用9个AI论文平台,助你轻松搞定本科毕业论文!

亲测好用9个AI论文平台,助你轻松搞定本科毕业论文! AI 工具如何帮你轻松应对论文写作难题 对于很多本科生来说,写论文不仅是一项学术任务,更是一场心理和时间的双重挑战。从选题、查资料到撰写、修改,每一步都可能让人…

【图像融合】小波变换红外和可见光图像融合(含评价指标)【含GUI Matlab源码 14958期】

💥💥💥💥💥💥💥💥💞💞💞💞💞💞💞💞💞Matlab武动乾坤博客之家💞…

AI智慧餐食机物联网平台懒人专属寻投资人

AI智慧餐食机物联网平台懒人专属寻投资人智慧餐食机物联网平台的功能结构 该架构遵循分层设计原则,从设备端到用户端,层层递进,保证系统的解耦和可扩展性。 ​核心设计理念:​​ 平台化、模块化、微服务架构。所有…

【1 月小记】Part 3: 概率 DP - L

概率 DP 存档一些概率 / 期望 DP 的好题,我会持续更新 一、数学概念初步 概率的基本性质 互斥事件的性质 若 \(A\) 与 \(B\) 互为互斥事件,则 \[P(A\cup B)=P(A)+P(B) \]对立事件的性质 若 \(A\) 与 \(B\) 互为对立事…

Webpack 在异步请求 JS 文件时获取 JS Bundle 的机制

Webpack 在异步请求 JS 文件时获取 JS Bundle 的机制 Webpack 在处理代码分割(Code Splitting)后产生的异步 chunk(通常是 import() 动态导入)时,浏览器最终是怎么知道要去请求哪个 .js 文件,以及**请求回…

OLAP在大数据营销分析中的关键作用

OLAP在大数据营销分析中的关键作用:从原理到实战的深度解析 引言:当营销分析遇到“数据困境” 想象一个场景:某电商公司的营销总监正在筹备618大促。他想知道: 近30天来自抖音渠道、25-35岁女性、浏览过护肤品但未下单的用户有…

2026年口碑好的市政路灯,新农村路灯,锂电太阳能路灯厂家实力品牌推荐榜 - 品牌鉴赏师

引言在我国城市建设与发展的进程中,路灯作为必不可少的基础设施,其质量、性能与节能环保等特性愈发受到关注。国内相关行业协会为了引导市场健康发展、规范路灯企业的生产销售行为,依据一系列科学、严谨的测评方法,…

ArkTS问题:怎么提升代码的优先级呢?

ArkTS问题:怎么提升代码的优先级呢?如题,现在我这边有个问题。 代码片段: ... this.firstFunction(); this.secondFunction(); this.thirdFunction(); ... 现在,出现的情况就是,firstFunction()必须得执行完成,…

2026年有实力的草坪灯,景观灯,景观灯厂家口碑品牌推荐榜 - 品牌鉴赏师

引言在城市化进程不断加速的今天,景观灯和草坪灯作为城市夜景照明与景观营造的重要元素,其品质和性能愈发受到关注。为了给消费者提供客观、公正的品牌参考,我们依据景观灯协会公开的数据形成的指南,结合国内相关行…

LeeCode_476 数字的补数

476. 数字的补数 对整数的二进制表示取反(0 变 1 ,1 变 0)后,再转换为十进制表示,可以得到这个整数的补数。 例如,整数 5 的二进制表示是 "101" ,取反后得到 "010" ,再转回十进制表示得到…

2026国内最新爆款裤料品牌top10推荐!广东广州等地优质裤料供应商权威榜单发布,创新工艺与品质保障助力服饰产业升级 - 品牌推荐2026

2026最新爆款裤料推荐!国内优质裤料供应商权威榜单发布,创新工艺与品质保障助力服饰产业升级 广州/广东爆款裤料服务公司推荐 引言 随着快时尚产业迭代加速与消费需求个性化升级,服饰品牌对裤装面料的功能性、定制灵…

51单片机_SPI

51单片机_SPI 一、SPI 时序初步认识 UART、I2C 和 SPI 是单片机系统中最常见的三种协议。SPI 是英文 Serial Peripheral Interface 的缩写,顾名思义就是串行外围设备接口。SPI 是一种高速的、全双工、同步通信总线,标…

零成本搭建全球加速后端!Cloudflare Workers + 国内优化,小白也能30分钟搞定

一、准备工作 1.1 注册Cloudflare账号 首先需要注册一个Cloudflare账号,可以用Google、GitHub等账号,Cloudflare提供免费计划,有数据库、对象存储等完全足够个人项目使用。 1.2 准备域名 自备一个域名,可以使用阿…

轮廓系数(Silhouette Score)量化K-Means聚类效果的核心指标

在K-Means聚类中,仅靠可视化判断聚类效果不够精准(尤其是高维数据),而**轮廓系数(Silhouette Score)** 是衡量聚类质量的黄金指标——它能从“同类紧致性”和“异类分离度”两个维度,用数值量化聚类的好坏,帮你…

BeautifulSoup-cnblog

BeautifulSoup ​ 蔬菜网 ​ (完整代码再文后) ​ 首先再基础的部分,和re正则不同的是,我们要先对拿到的网页源代码进行解析。 ​ 接着我们观察一下源代码,这里我们要爬的是网页中蔬菜的价格。 我们可以发现所…

方框标定代码

import numpy as np import cv2 import glob# 1. 准备标定板参数 chessboard_size (7, 10) # 内角点数量 square_size 13.0 # 毫米# 2. 生成世界坐标系中的3D点 objp np.zeros((chessboard_size[0]*chessboard_size[1], 3), np.float32) objp[:, :2] np.mgrid[0:chessboa…