IO, 输入输出

https://my.oschina.net/u/1859679/blog/1839169

同步阻塞 IO 同步非阻塞 IO 异步非阻塞 IO

针对某种 IO 模型,我们如何分类,可以基于 POSIX 对同步/异步的定义来判别:

  • A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes; (同步 I/O 操作会导致发起请求的进程被阻塞,直到该 I/O 操作完成。)
  • An asynchronous I/O operation does not cause the requesting process to be blocked; (异步 I/O 操作不会导致发起请求的进程被阻塞。)

那么从上我们可以看出:

同步: 是否同步体现在消息通信机制上。

阻塞: 是否阻塞主要体现在调用的线程是否可以干别的,关注的是程序的等待状态

也就是说同步和异步说的是消息的通知机制,阻塞非阻塞说的是线程的状态 。

Unix 5种I/O模型

在《UNIX网络编程: 卷一》的第六章书中列出了五种IO模型:

  • 阻塞式I/O;
  • 非阻塞式I/O;
  • I/O复用 (select,poll,epoll…) ;
  • 信号驱动式I/O (SIGIO) ;
  • 异步I/O (POSIX的 aio 系列函数)