堵塞形I/O模型
上图为堵塞形I/O模型,进程调用recvfrom命令,进程一直等待直到数据报被复制到进程的缓冲区或者发生错误才返回。进程从调用recvfrom开始到它返回的整段时间内是被阻塞的。
非堵塞形I/O模型
多路复用I/O模型
信号驱动I/O模型
异步I/O模型
五种模型异同
上面五种I/O模型中,前四种都是同步I/O模型,因为他们在真的的I/O操作时,都堵塞了进程,在将数据从内核空间复制到用户空间时都是堵塞状态。
一般I/O操作可以分为两步,第一步:发起IO请求,第二步:实际IO操作
堵塞IO和非堵塞IO的区别就在于第一步发起请求是否堵塞,如果堵塞直到完成就是传统的堵塞IO模型,否则就是非堵塞IO模型
同步IO和异步IO的区别就在于第二步实际IO操作是否堵塞,如果实际的IO读写阻塞请求进程,那么就是同步IO,因此阻塞IO、非阻塞IO、IO复用、信号驱动IO都是同步IO,如果不阻塞,而是操作系统做完IO两个阶段的操作再将结果返回,那么就是异步IO。