IO

copy form https://blog.csdn.net/lisonglisonglisong/article/details/51944671

两个阶段:

  1. 等待数据
  2. 数据从内核态复制到用户态

1. 阻塞式IO

阶段1与阶段2都阻塞


image.png

2. 非阻塞式IO

依然会在阶段2阻塞


image.png

3. IO多路复用(事件驱动IO)

依然会在阶段2阻塞


image.png

4. 信号驱动式IO

image.png

5. 异步IO

image.png

五种IO模型比较

1-4 都是阶段2阻塞


image.png

阻塞/非阻塞

阻塞I/O会一直阻塞用户进程直到操作完成
非阻塞I/O在内核的数据还没准备好的情况下会立即返回

同步/异步

POSIX是这样定义的:

A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes. —— 同步IO操作导致进程阻塞,直到IO操作完成。
An asynchronous I/O operation does not cause the requesting process to be blocked. —— 异步IO操作不导致进程阻塞。

上面定义中的I/O operation是指真正的I/O系统调用,比如recvfrom,所以阻塞式I/O模型、非阻塞式I/O模型、I/O复用模型、信号驱动式I/O模型都属于同步I/O。
只有异步I/O模型属于POSIX定义的异步I/O,因为在异步I/O模型中,用户进程是将整个I/O操作都交给内核来完成,内核完成后发信号通知,在此期间用户进程完全不用去理会。

你可能感兴趣的:(IO)