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 系列函数)