UNIX下有五种I/O模型
- 阻塞I/O模型
- 非阻塞I/O模型
- I/O复用(select和poll)
- 信号驱动I/O
- 异步I/O
第1种:阻塞I/O模型
请求的I/O操作阻塞进程,直到I/O操作完成。如下图:
第2种:非阻塞I/O模型
当请求I/O操作非得让进程阻塞不能完成时,不让进程阻塞,而应返回一个错误。如下图:
第3种:I/O复用模型
调用select或poll,在这两个系统调用中的某一个上阻塞,而不是阻塞于真正的I/O系统调用。如下图:
第4种:信号驱动I/O模型
对I/O操作接口进行信号驱动处理,并通过系统调用sigaction安装一个信号处理程序。系统调用立即返回,进程继续执行,非阻塞。当数据准备好时会产生SIGIO信号,我们随时可调用信号处理程序处理。如下图:
第5种:异步I/O模型
让内核启动操作,并在整个操作完成之后通知我们。与信号驱动I/O的主要区别在于:信号驱动I/O是内核通知我们何时完成可以启动一个I/O操作,而异步I/O模型是由内核通知我们I/O操作何时完成。如下图: