1、阻塞式I/O
2、非阻塞式I/O
例如:进程把一个套接字设置成非阻塞是在通知内核:当所请求的I/O操作非得把本进程投入睡眠才能完成,不要把本进程投入睡眠,而是返回一个错误。
3、I/O复用模型
例如:有了I/O复用,就可以调用select()或poll(),阻塞在这两个系统调用中的某一个之上,而不是阻塞在真正的I/O系统调用上。
4、信号驱动式I/O模型
例如:可用信号,让内核在描述符就绪时发送SIGIO信号通知我们,我们称之为信号驱动式I/O。
5、异步I/O模型(POSIX异步函数以aio_或lio_开头)
例如:异步I/O工作机制:告知内核启动某个操作,并让内核在整个操作(包括将数据从内核复制到我们自己的缓冲区)完成后通知我们。
注意:
信号驱动I/O与异步I/O模型区别:信号驱动式I/O是由内核通知我们何时可以启动一个I/O操作,而异步I/O模型是由内核通知我们I/O操作何时完成。