IO 概念

一个基本的 IO,它会涉及到两个系统对象,一个是调用这个 IO 的进程对象,另一个就是系统内核 (kernel)。当一个 read 操作发生时,它会经历两个阶段:

  • 通过 read 系统调用想内核发起读请求。
  • 内核向硬件发送读指令,并等待读就绪。
  • 内核把将要读取的数据复制到描述符所指向的内核缓存区中。
  • 将数据从内核缓存区拷贝到用户进程空间中。

IO 模型对比

从等待数据和数据复制这两个时间段,指出了不同 I/O 模型的区别

类比餐厅吃饭

看了几篇文章,为了加深理解,我做了文字排版上的优化,方便从相似的地方发现他们本质上的不同。

  • 我们去餐厅吃饭,会经过以下几个步骤:

    • 首先你(用户态进程)在饭店(内核态的进程)根据菜单点菜
    • 然后等待厨房准备好 ⇒ 等待数据
    • 接着服务员(内核态的进程)上菜。⇒ 将数据从内核复制到用户空间
  • 只点一个菜
    • 然后在餐桌上开始等待

      • 你在这个过程中什么事都不干

        • 直到服务员上菜 ⇒ 阻塞式 I/O 模型
        • 等了一会儿然后就去问服务员,不断重复问,直到服务员上菜 ⇒ 非阻塞式 I/O 模型
      • 你给服务员留下手机,告诉他菜准备好的话
        • 先不要上菜,打个电话给你,然后你就出去玩耍了

          • 等到菜准备好了,服务员手机通知你,你立马回到了餐厅

            • 你对服务员说 “你现在可以上菜了”,于是你在餐桌上等待服务员把菜送上来,然后吃饭。 ⇒ 信号驱动式 I/O 模型
        • 先上菜,菜上桌了打电话给你,然后你就出去玩耍了
          • 等到菜上桌了,服务员手机通知你,你立马回到了餐桌

            • 开始吃饭。 ⇒ 异步 I/O 模型
  • 你点了很多菜
    • 然后在餐桌上开始等待

      • 你在这个过程中什么事都不干

        • 某个时刻其中一个菜或者多个菜厨房里同时好了,

          • 服务员跑过来说,“亲,您的有些菜好了,要现在上桌么?”
          • 你回答,现在就上,于是服务员上一个菜(服务员一次只能上一个菜),你就吃完一个,上一个你就吃完一个 ⇒ I/O 复用模型

参考资料:

1.IO 模型浅析 - 阻塞、非阻塞、IO 复用、信号驱动、异步 IO、同步 IO

2.Linux IO 模型:阻塞 / 非阻塞 / IO 复用 同步 / 异步 Select/Epoll/AIO

🍛 餐厅吃饭版理解 IO 模型:阻塞 / 非阻塞 / IO 复用 / 信号驱动 / 异步的更多相关文章

  1. Python之阻塞IO模型与非阻塞IO模型

    Python之阻塞IO模型与非阻塞IO模型 IO模型 1 阻塞IO: 全程阻塞 2 非阻塞IO: 发送多次系统调用: 优点:wait for data时无阻塞 缺点:1 系统调用太多 2 数据不是实时 ...

  2. IO模型之非阻塞IO

    1. IO模型非阻塞 IO Linux下,可以通过设置socket使其变为 non-blocking.当对一个non-blocking socket执行读操作时,流程是这个样子: 从图中可以看出,当用 ...

  3. IO模型,非阻塞IO模型,select实现多路复用

    1. IO阻塞模型 IO问题: 输入输出 我要一个用户名用来执行登陆操作,问题用户名需要用户输入,输入需要耗时, 如果输入没有完成,后续逻辑无法继续,所以默认的处理方式就是 等 将当前进程阻塞住,切换 ...

  4. 深入了解几种IO模型(阻塞非阻塞,同步异步)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zk3326312/article/details/79400805一般来说,Linux下系统IO主要 ...

  5. Java IO 学习(一)同步/异步/阻塞/非阻塞

    关于IO,同步/异步/阻塞/非阻塞,这几个关键词是经常听到的,譬如: “Java oio是阻塞的,nio是非阻塞的” “NodeJS的IO是异步的” 但是这些东西听多了就容易迷糊,比方说同步是否就是阻 ...

  6. Linux IO 同步/异步 阻塞/非阻塞

    同步IO:导致请求进程阻塞,直到IO操作完成: 是内核通知我们何时进行启动IO操作,而实际的IO操作需要当前进程本身阻塞完成: 包括:阻塞式IO模型,非阻塞式IO模型,IO复用模型,信号驱动式IO模型 ...

  7. linux基础编程:IO模型:阻塞/非阻塞/IO复用 同步/异步 Select/Epoll/AIO(转载)

      IO概念 Linux的内核将所有外部设备都可以看做一个文件来操作.那么我们对与外部设备的操作都可以看做对文件进行操作.我们对一个文件的读写,都通过调用内核提供的系统调用:内核给我们返回一个file ...

  8. 理解同步,异步,阻塞,非阻塞,多路复用,事件驱动IO

    以下是IO的一个基本过程 先理解一下用户空间和内核空间,系统为了保护内核数据,会将寻址空间分为用户空间和内核空间,32位机器为例,高1G字节作为内核空间,低3G字节作为用户空间.当用户程序读取数据的时 ...

  9. (转)同步异步,阻塞非阻塞 和nginx的IO模型

    同步异步,阻塞非阻塞 和nginx的IO模型  原文:https://www.cnblogs.com/wxl-dede/p/5134636.html 同步与异步 同步和异步关注的是消息通信机制 (sy ...

随机推荐

  1. Shell 函数带中横线问题排查

    Shell 中编写的函数,如果函数名中带了中横线,在使用 /bin/sh 执行时会报错. ➜ subprocess git:(master) ✗ cat kubectl.sh _kubectl_api ...

  2. simple js

    simple js 题目描述:小宁发现了一个网页,但却一直输不对密码.(Flag格式为 Cyberpeace{xxxxxxxxx} ) 打开题目后,有一个Enter password框,要求输入密码, ...

  3. [杂记]如何在LaTeX里插入高亮代码

    继上次学会在ppt里面插入带有高亮的c程序代码之后,zyy在这条不归路上越走越远-- 好的,长话短说,今天我介绍的是怎么在LaTeX中插入高亮的c程序代码.(其实不止c程序的代码,别的语言也是可以的, ...

  4. proto编译组件使用

    proto编译组件使用 前提:所有组件已经安装好,包括: protoc protoc-gen-go protoc-gen-grpc-gateway protoc-gen-swagger 怎么装再开一篇 ...

  5. 替代Tableau,思迈特软件Smartbi让Excel成为企业级自助分析平台

        谈到企业级自助分析平台,大家自然会想到Tableau,在Garnter最新的BI平台魔力象限中,是这么描述Tableau的. "Tableau is a Leader in this ...

  6. 关于GDPR的六大理解

    通用数据保护条例(GDPR)于2018年5月生效,根据法律条文,英国几乎所有企业都需要遵守该规定.然而,人们对法规本身及其对组织的意义仍存在一些误解.这可能会导致一些错误的决定. 通用数据保护条例(G ...

  7. linux常用命令与实例小全

    转至:https://www.cnblogs.com/xieguohui/p/8296864.html  linux常用命令与实例小全 阅读目录(Content) 引言 一.安装和登录 (一)    ...

  8. Oracle sqlplus 常用命令总结

    转至:https://blog.csdn.net/iteye_20746/article/details/81801309?utm_medium=distribute.pc_relevant.none ...

  9. Python:matplotlib.pyplot

    翻译总结自:matplotlib.pyplot - Matplotlib 3.4.3 documentation 函数 说明 acorr x的自相关性图 angle_spectrum 角度谱 anno ...

  10. ValueError: not enough values to unpack

    当在同一行为两个变量赋值时,要用分号;而非逗号,隔开