1.blocking I/O
最常见的是blocking I/O, 系统调用会阻塞,直到这个系统调用返回,一般来说都有一个在user space切换到kernel space,然后再切回来的过程
2.nonblocking I/O
即使系统调用不能达到预期的目标也会立即返回,一般的实现会持续的poolling, 但这么做往往耗费大量的CPU时间,这种方式偶尔会碰到,一般是在专门提供某种功能的系统中才有
3.I/O multiplexing
调用select和poll, 当其中的一个I/O可用,select会得到哪个I/O可用,其优势在于等待多个I/O socket
4.signal-driven I/O
当某些事请准备好后,通过signal的方式通知主程序,这种模型的优势在于进程不被阻塞,主程序可以继续执行
5.asynchronous I/O
这种模型的工作方式:告知kernel启动某个操作,并让kernel在整个操作完成后通知我们,与上面的signal-driven的区别:信号驱动由kernel通知我们何时启动一个I/O操作,而asynchronous I/O是由内核通知我们I/O操作何时完成