Bootstrap

IO系列——UNIX五种IO模型

《UNIX网络编程:卷一》总结了五种经典的IO模型,分别为:阻塞式IO模型、非阻塞式IO模型、多路复用IO模型、信号驱动IO模型、异步IO模型。

1. 阻塞IO

阻塞式IO模型:进程发起IO请求,在整个过程会一直阻塞,直到数据返回到用户空间。

2. 非阻塞IO

非阻塞式IO模型:进程发起IO请求后,若内核没有准备好数据,立即给进程返回一个状态,进程会一直轮询内核,直到内核有数据准备好,阻塞等待内核将数据从内核空间复制到用户空间。

3. 多路复用IO

IO复用模型:进程发起一个IO请求,然后把自己注册到一个select的系统进程,select会监听数据是否准备好,若准备好select会通知进程,进程发起系统调用,CPU会复制内核空间缓冲区数据到用户空间,复制数据过程也是阻塞的。

为什么叫IO多路复用呢?因为select可以接受多个进程注册,可以监听多个进程的IO请求,不像非阻塞式IO模型需要进程不断轮询,多路复用模型把询问的任务交给了select,让多个进程都可以共享select。

4. 信号驱动IO

信号驱动IO模型:进程通过系统调用注册了一个信号处理程序,信号处理程序会在数据准备好时,发送信号告知进程,进程再发起系统调用,CPU会把内核空间的数据复制到用户空间返回,复制的过程会阻塞进程。

5. 异步IO

异步IO模型:进程发起系统调用后,直接返回,不需要阻塞,直到数据从内核空间复制用户空间完成后,系统通知进程IO完成。

6. 同步IO和异步IO

其中,阻塞IO、非阻塞IO、多路复用IO、信号驱动IO属于同步IO,这四种IO模型都需要用户进程自己把数据从内核缓冲区复制到用户缓存区,复制的过程会阻塞线程;只有异步IO属于异步IO,不需要用户进程复制内核缓冲区数据。

IO相关文章