数据|今天来图解IO模型——BIO、NIO、AIO
文章图片
文章图片
作者|JerrysCode|简书操作系统分为用户空间和内核空间 , 出于安全考虑 , 应用程序无法直接操作内核空间的数据 。当应用程序发起I/O操作时 , 需要经过等待数据和拷贝数据两步 , 这两步的处理方式不同 , 就会产生不同的IO模型 。我们把数据读取分为两个步骤
step1 准备数据阶段:数据从硬件拷贝到内核缓冲区 , 这里的硬件可以是磁盘 , 网卡等设备 。
step2 拷贝数据阶段:数据从内核缓冲区拷贝到用户空间缓冲区
根据step1是否阻塞可以把IO操作划分为:
阻塞IO
非阻塞IO
根据step2是否是否阻塞可以划分为:
同步IO
异步IOBIO——同步阻塞IO
应用进程发起read调用后就阻塞直到数据读取完成, 在这个过程中用户进程会让出CPU
【数据|今天来图解IO模型——BIO、NIO、AIO】
文章图片
文章图片
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流行 。
推荐阅读
- 暗淡青春|一根数据线居然卖354元
- 数据|10分钟,做一份数据可视化分析报表
- 数据|2020中国大数据产业发展指数在京发布
- 智能|每日互动入选爱分析数据智能厂商全景报告,持续引领数据智能新风向
- 数据|7.41亿!汇客云发布国庆8天全国购物中心客流数据报告
- 猎云网|医疗大数据分析服务商“脉兴医疗”获树兰俊杰资本千万级投资
- 老年|国庆长假结束,高德地图大数据显示大家竟然爱去这些地方
- 数据|徐叶润:另类数据技术是驱动资管科技的核心
- 旅游|小红书发布十一出行消费数据,“周边游”热度暴涨377%
- 数据|科大讯飞在遵义成立大数据公司,注册资本3000万人民币
