技术编程|今天来图解IO模型——BIO、NIO、AIO
本文插图
作者|JerrysCode|简书操作系统分为用户空间和内核空间 , 出于安全考虑 , 应用程序无法直接操作内核空间的数据 。 当应用程序发起I/O操作时 , 需要经过等待数据和拷贝数据两步 , 这两步的处理方式不同 , 就会产生不同的IO模型 。 我们把数据读取分为两个步骤
step1 准备数据阶段:数据从硬件拷贝到内核缓冲区 , 这里的硬件可以是磁盘 , 网卡等设备 。
step2 拷贝数据阶段:数据从内核缓冲区拷贝到用户空间缓冲区
根据step1是否阻塞可以把IO操作划分为:
阻塞IO
【技术编程|今天来图解IO模型——BIO、NIO、AIO】非阻塞IO
根据step2是否是否阻塞可以划分为:
同步IO
异步IOBIO——同步阻塞IO
应用进程发起read调用后就阻塞直到数据读取完成, 在这个过程中用户进程会让出CPU
本文插图
BIO
NIO
应用进程发起read操作 , 发现数据没有准备好就立即返回 , 用户进程不会阻塞 , 可以继续执行其他的任务 。 同时不断发起read轮询直到数据就绪 , 然后进程阻塞等待数据从内核空间拷贝到用户空间 。
在step1用户进程是非阻塞的 , step2是阻塞的(同步的) , 所以叫同步非阻塞IO 。
本文插图
NIO
IO多路复用
当IO进程较多时 , 每个进程都去轮询数据会占用大量CPU , 因此在NIO基础上引入select , select会监控多路IO , 当其中一路IO的数据就绪 , 就发送事件唤醒对应的进程, 这样就实现了多个进程IO复用select , 减少了CPU消耗 。
本文插图
多路复用AIO
应用进程发起read调用时向操作系统内核注册一个回调函数 , read立即返回;内核准备数据 , 拷贝数据到用户空间后 , 回调这个函数 。
本文插图
AIO
由于Linux只支持文件AIO , 不支持网络AIO , 所以AIO不如NIO流行 。
推荐阅读
- 小龙虾|三农探析:池塘养殖小龙虾如何高产?高产养殖技术全解析
- 为什么商家卖的馒头又白又胖?里面加了什么东西,今天我来告诉你
- 这四道菜怎么样?今天晚餐就它们吧!
- 有两种谷物被称为“长寿食材”,却很少人当主食吃,从今天要改
- 广式叉烧肉,外焦里嫩,看着就让人垂涎欲滴
- 豆沙酥饼的家常做法
- “木耳”最忌讳拿水直接泡,今天教给你1招,即节省时间效果也好
- 大棚蔬菜|早春大棚蔬菜病虫害防治技术要点,老农讲得太实用了
- 松树|松烂皮病的发生规律和防治技术-松树枯梢病防治技术
- 中煤科工集团|中煤科工集团西安研究院研发煤层气(瓦斯)地面抽采新技术
