图解IO模型——BIO,NIO,AIO
操作系统分为客户空间和内核空间,出于安全考虑,应用程序无法直接操作内核空间的数据。当应用程序发起I/O操作时,需要经过等待数据和拷贝数据两步,这两步的解决方式不同,就会产生不同的IO模型。
我们把数据读取分为两个步骤
- step1 准备数据阶段:数据从硬件拷贝到内核缓冲区,这里的硬件可以是磁盘,网卡等设施。
- step2 拷贝数据阶段:数据从内核缓冲区拷贝到客户空间缓冲区
根据step1能否阻塞可以把IO操作划分为:
- 阻塞IO
- 非阻塞IO
根据step2能否能否阻塞可以划分为:
- 同步IO
- 异步IO
BIO——同步阻塞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. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 图解IO模型——BIO,NIO,AIO
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 图解IO模型——BIO,NIO,AIO