美文网首页我爱编程
Linux的五种I/O模型

Linux的五种I/O模型

作者: viean | 来源:发表于2018-04-12 09:38 被阅读0次

一.引子

linux进行磁盘、网络等I/O操作时,进程是无法直接操作I/O设备,所有操作都经由系统调用请求Linux Kernel来协助完成I/O动作,且内核会为每一个I/O设备维护一个Buffer。如下图展示了进程进行I/O操作时的流程: 用户进程进行I/O操作的流程

流程介绍:process发起请求,Kernel接收请求,从I/O设备中获取数据至Kernel的Buffer,再将Buffer中的数据拷贝到用户进程的地址空间,进程获取到数据后,再响应客户端;(上图中红色线条的两阶段)

二.I/O模型的划分

在整个交互过程中数据输出至Kernel的buffer及将数据copy到用户进程的地址空间都需要时间。因此根据这两段时间内等待方式的不同,I/O模型分为五种模式:

1.阻塞I/O (Blocking I/O)
2.非阻塞I/O (Non-Blocking I/O)
3.I/O复用 (I/O Multiplexing)
4.信号驱动的I/O (Signal Driven I/O)
5.异步I/O (Asynchrnous I/O)

阻塞:调用进程一直处于等待状态,直到操作完成;
非阻塞:在内核的数据还未准备好时,会先返回,进行进行其他操作;
从同步异步,以及阻塞、非阻塞两个维度来划分来看:


I/O模型同步及阻塞维度划分

三.I/O模型分别介绍

1.阻塞I/O

特点:I/O执行的两阶段进行都被block.

2.非阻塞I/O

特点:用户只有在第二阶段被阻塞,第一阶段没有阻塞。第一阶段中,用户进程轮询内核,看数据是否准备好。与轮询方式对应的为信号驱动 的I/O,如下一个所示。

3.信号驱动的I/O 或 基于事件驱动的I/O模型


特点:第一阶段未阻塞,第二阶段阻塞;用户进程不需要轮询系统内核,等数据准备好时,内核主动通知用户进程。

4.I/O复用


特点:I/O执行的两个阶段都是阻塞的;两个阶段是独立的,一次完整I/O操作中,用户进程发起两个系统调用。

注:I/O多路复用模型应用非常广泛,其核心思想可以用下图介绍;


select, poll, epoll 都是I/O多路复用的具体的实现,之所以有三者的存在,其实是他们出现是有先后顺序的。具体介绍参考如下链接:
https://www.cnblogs.com/creazylinux/p/7364685.html

5.异步I/O


特点:用户进程发起系统调用后,立即可做其他事情(不阻塞),直到I/O执行的两个阶段都完成后,内核会给用户进程发送通知,告诉用户进程已经完成。

四.五种模型总结

备注:参考 cnblog @子夜文章,在此感谢

相关文章

  • Linux I/O模型的前世今生

    Linux I/O模型 阻塞式I/O模型 非阻塞式I/O模型 I/O复用式模型 信号驱动式I/O模型 异步I/O模...

  • Linux中的IO模型

    Linux五种IO模型 blocking I/O nonblocking I/O I/O multiplexing...

  • Netty入门笔记

    知识点:Reactor模式 一、Linux网络I/O模型简介 1.阻塞I/O模型:开始I/O操作时直到数据...

  • Linux5种I/O模型

    Linux的5种I/O模型分别为: 1)阻塞I/O(blocking I/O)2)非阻塞I/O(nonblocki...

  • Netty-NIO

    理解Netty的本质原理,最好理解Linux的I/O模型,参考书---《Unix网络编程》 Linux I/O流程...

  • linux I/O5中模型认识

    linux I/O5中模型 引入I/O模型 标准I/O: 缓存 IO 又被称作标准 IO,大多数文件系统的默认 I...

  • Netty理论一:Java IO与NIO

    1、Linux IO模型 1、《Unix网络编程》把I/O模型分成五类阻塞式I/O模型:整个过程都是阻塞的——BI...

  • Linux文件描述符

    玩转Linux旧群已满,请加新群:278378501。 在Linux通用I/O模型中,I/O操作系列函数(系统调用...

  • Poll

    Linux下有三种I/O复用模型,select、poll、epoll 为什么要用I/O复用模型呢? 计算机资源有限...

  • Linux/UNIX系统编程手册-文件IO

    Linux/UNIX系统编程手册 [德] Michael Kerrisk 第4章 文件I/O: 通用的I/O模型 ...

网友评论

    本文标题:Linux的五种I/O模型

    本文链接:https://www.haomeiwen.com/subject/wjtxkftx.html