0
点赞
收藏
分享

微信扫一扫

图解IO模型——BIO,NIO,AIO

图解IO模型——BIO,NIO,AIO
服务架构模式——TPC/PPC模式
服务架构模式——单Reactor模式
服务架构模式——多Reactor模式
服务架构模式——Proactor模式

我们把数据读取分为两个步骤

  • step1 准备数据阶段:数据从硬件拷贝到内核缓冲区,这里的硬件可以是磁盘,网卡等设备。
  • step2 拷贝数据阶段:数据从内核缓冲区拷贝到用户空间缓冲区

根据step1是否阻塞可以把IO操作划分为:

  • 阻塞IO
  • 非阻塞IO

根据step2是否是否阻塞可以划分为:

  • 同步IO
  • 异步IO

BIO——同步阻塞IO

应用进程发起read调用后就阻塞直到数据读取完成 ,在这个过程中用户进程会让出CPU

NIO

应用进程发起read操作,发现数据没有准备好就立即返回,用户进程不会阻塞,可以继续执行其他的任务。同时不断发起read轮询直到数据就绪,然后进程阻塞等待数据从内核空间拷贝到用户空间。
在step1用户进程是非阻塞的,step2是阻塞的(同步的),所以叫同步非阻塞IO。

IO多路复用

当IO进程较多时,每个进程都去轮询数据会占用大量CPU,因此在NIO基础上引入select,select会监控多路IO,当其中一路IO的数据就绪,就发送事件唤醒对应的进程, 这样就实现了多个进程IO复用select,减少了CPU消耗。


AIO

应用进程发起read调用时向操作系统内核注册一个回调函数,read立即返回;内核准备数据,拷贝数据到用户空间后,回调这个函数。


由于Linux只支持文件AIO,不支持网络AIO,所以AIO不如NIO流行。

举报

相关推荐

0 条评论