概述
在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调用后,同步等待数据准备和数据拷贝。
非阻塞I/O
进程发起单个I/O调用后,轮询数据准备是否完成,然后,再同步等待数据拷贝。
I/O复用
进程使用select方法对发起的多个I/O调用进行检查,同步等待数据准备完成,然后再同步拷贝数据。
信号驱动I/O
进程发起I/O调用后立马返回,待收到数据准备信号后,再同步拷贝数据。
异步I/O
进程发起I/O调用后,待数据准备好,并且拷贝完成后,再异步进行处理。
几种模式的比较
前面四种模式的主要区别在于第一阶段有所不同,第二阶段都是一样的,同步拷贝数据。相比之下,异步I/O两个阶段就是纯异步的。
[1] Unix Network Programming. link
来源:https://blog.csdn.net/rightisww/article/details/100673365