Unix环境下的I/O模型

烈酒焚心 提交于 2019-11-29 08:27:19

概述

在Unix环境下,有5种不同的I/O模型:

  • 阻塞I/O(blocking I/O)
  • 非阻塞I/O(nonblocking I/O)
  • I/O复用(I/O multiplexing,select and poll)
  • 信号驱动I/O(signal driven I/O,SIGIO)
  • 异步I/O(asynchronous I/O,the POSIX aio_functions)

通常情况下,I/O输入操作主要包含这两个阶段:

  • 等待数据准备好
  • 内核和应用进程之间拷贝数据

下面从这两点去比较不同的I/O模型。

几种模式的分别描述

阻塞I/O

进程发起单个I/O调用后,同步等待数据准备和数据拷贝。

 

image.png

 

非阻塞I/O

进程发起单个I/O调用后,轮询数据准备是否完成,然后,再同步等待数据拷贝。

 

image.png

 

I/O复用

进程使用select方法对发起的多个I/O调用进行检查,同步等待数据准备完成,然后再同步拷贝数据。

 

image.png

 

信号驱动I/O

进程发起I/O调用后立马返回,待收到数据准备信号后,再同步拷贝数据。

 

image.png

 

异步I/O

进程发起I/O调用后,待数据准备好,并且拷贝完成后,再异步进行处理。

 

image.png

 

几种模式的比较

前面四种模式的主要区别在于第一阶段有所不同,第二阶段都是一样的,同步拷贝数据。相比之下,异步I/O两个阶段就是纯异步的。

 

image.png

 

 

[1] Unix Network Programming. link

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!