浅谈Linux下的五种I/O模型

来源:互联网 发布:淘宝联盟怎么赚取佣金 编辑:程序博客网 时间:2024/06/05 17:08

一、关于I/O模型的引出

我们都知道,为了OS的安全性等的考虑,进程是无法直接操作I/O设备的,其必须通过系统调用请求内核来协助完成I/O动作,而内核会为每个I/O设备维护一个buffer。
如下图所示:

因此整个请求过程即为:用户进程发起请求,内核接受到请求后,从I/O设备中获取数据到buffer中,再将buffer中的数据copy到用户进程的地址空间,该用户进程获取到数据后再响应客户端。

在整个请求的过程中,数据输入至buffer需要时间,而从buffer复制数据至进程也需要时间。因此根据在这两段时间内等待方式的不同,I/O动作可以分为以下五种模式:

    阻塞I/O (Blocking I/O)

    非阻塞I/O (Non-Blocking I/O)

    I/O复用(I/O Multiplexing)

    信号驱动的I/O (Signal Driven I/O)

    异步I/O (Asynchrnous I/O)

二、关于I/O模型的划分

概念解释:
阻塞:调用的进程一直处于等待状态,直到操作完成。
非阻塞:在内核的数据还未准备好时,会立即返回,进程可以去干其他事情。
从同步异步,以及阻塞、非阻塞两个维度来划分来看


0 0