写点什么

IO 系列——UNIX 五种 IO 模型

用户头像
Java联盟
关注
发布于: 2020 年 07 月 24 日
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 相关文章

  1. IO系列——用户空间与内核空间

  2. IO系列——UNIX五种IO模型


发布于: 2020 年 07 月 24 日阅读数: 216
用户头像

Java联盟

关注

海纳百川,有容乃大。 2019.04.18 加入

~

评论

发布
暂无评论
IO系列——UNIX五种IO模型