一、IO基本概念
在平常开发过程中接触最多的就是 磁盘 IO(读写文件) 和 网络 IO(网络请求和响应)。
用户进程想要执行 IO 操作的话,必须通过 系统调用 来间接访问内核空间。
当应用程序发起IO调用后,会经历两个步骤:
1、内核等待IO设备准备好数据
2、内核将数据从内核空间拷贝到用户空间
二、常见的IO模型
1、BIO:同步阻塞IO模型
用户进程发起 系统调用后,会一直阻塞,直到内核把数据拷贝到用户空间。
2、NIO:同步非阻塞IO模型
通过轮询的方式询问内核是否把数据准备完毕,数据就绪后再把数据拷贝到用户空间。拷贝的这个过程还是阻塞的。
但是轮询非常消耗CPU资源,因此出现了IO多路复用模型
IO多路复用模型中,用户进程首先发起select/poll/epoll调用,本质上就是使用选择器监听多个通道,等内核把数据准备好了,用户进程再发起 read系统调用,把内核数据拷贝到用户进程空间。
-
select 调用:内核提供的系统调用,它支持一次查询多个系统调用的可用状态。几乎所有的操作系统都支持。
-
epoll 调用:linux 2.6 内核,属于 select 调用的增强版本,优化了 IO 的执行效率。
select调用和epoll调用本质上就是通过选择器监听多个通道,非阻塞,处理完成之后就返回
3、AIO:异步IO模型
应用程序发起系统调用后直接返回,当内核处理完成后,操作系统通知相应的线程进行后续的操作
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理