什么是IO?

 在计算机中无时无刻不存在着对数据的访问和读取(数据都存储在物理的媒介上,例如寄存器,高速缓存,内存,磁盘,网卡等等),这些操作被称为IO。

阻塞IO

  • 当用户线程发起IO请求后,会进行系统调用(system call)来让内核(Kernel)进行IO操作
  • 此时用户线程阻塞,等待内核将数据准备好
  • 内核将数据准备好后会将数据从内核空间拷贝到用户空间,并返回给用户线程结束阻塞。

非阻塞IO

  • 由用户线程发起IO请求, 进行系统调用来让内核进行IO操作
  • 此时如果内核没有准备好数据则会直接返回error,并不会阻塞用户线程,用户线程可以重复的发起IO请求
  • 当用户线程发起请求并且内核已经将数据准备好后,会将数据从内核空间拷贝到用户空间(这个过程是需要阻塞用户线程的),返回给用户

多路复用IO

  • 用户线程调用select后进行系统调用(内核会监视所有select负责的socket),此时用户线程被阻塞
  • 当内核将数据准备好后就会返回,并通知用户线程进行读取操作,此时内核将数据拷贝到用户空间并返回

异步IO

  • 用户线程进行aio_read,进行系统调用切换到内核
  • 内核立即返回,并不会阻塞用户线程
  • 内核准备好数据后会将数据从内核空间拷贝到用户空间并通知用户线程操作已完成

阻塞IO与非阻塞IO?

阻塞IO:用户线程发起IO操作,紧接着由内核线程来执行IO操作,在阻塞IO中内核线程并不会立即返回而是等待数据拷贝到内存空间时才返回,在此期间用户线程处于阻塞状态。

 非阻塞IO: 与阻塞IO不同,内核线程在执行IO操作后会立即返回,若结果为error则用户线程可以重新发起请求而不会被阻塞,一旦内核将数据准备好了且用户线程发起了IO请求那么将数据拷贝到用户空间。

  我们看上面的图可以知道IO操作大致分为两个部分:

  • 用户线程发起IO请求时,内核未准备好数据

  • 用户线程发起IO请求时,内核以准备好数据

    通过对比两个图中流程我们可以发现,(2)这个流程在阻塞IO与非阻塞IO流程是相同的区别在于(1)这个步骤。因此阻塞IO与非阻塞IO的区别在于内核线程在执行IO操作时是否立即返回结果,若立即返

    回则为非阻塞IO,反之则为阻塞IO。

同步与异步IO?

  * 异步IO: 用户线程发起IO操作后,可以立即去做其他事情,另一方面,对于内核线程当它收到异步读取之后会立即返回,不会对用户线程造成阻塞。当内核将数据准备好之后会将数据从内核空间拷贝到用户空间,内核会发送   给用户一个信号通知用户IO操作已完成。

  • 同步IO: 同步IO的关键在于在真正读取数据(也就是上面提到的(2)这个步骤)的时候用户线程是否被阻塞。非阻塞IO虽然在用户发起请求时会立即返回,但是当内核准备好数据之后,任然需要用户线程发起请求才会将数据   从内核空间拷贝到用户空间,因此非阻塞IO属于同步IO。

异步IO与非阻塞IO的区别?

 异步IO与非阻塞IO的区别在于,当用户线程发起一次IO操作不需要再次去确认内核是否准备好数据。异步IO中内核准备好数据后会将数据从内核空间自动拷贝到用户空间。

总结

  最后统一的总结一下:

  用户进程发起请求从内核中获取数据那么这时候有两种情况:

  • 操作系统还没有准备后数据,那么这时候怎么办,有两种方法:

        a. 让用于进程等着(这种情况就是阻塞)

        b. 如果没有数据就返回一个ERROR,不需要用户进程干等(这种情况就是非阻塞)

  • 过了一会儿操作系统准备好数据了,这时候又有两种方法:

        a. 啥也不管,等着用户进程再次来请求才把数据给它(这种情况就是同步)

        b. 负责到底,数据准备好,直接给到用户进程,并且还发出一个信号,告诉用户进程数据已经准备好(这种情况就是异步)

 因此,我们可以发现:不管是阻塞IO,还是非阻塞IO都是同步IO。

同步IO(阻塞IO、非阻塞IO), 异步IO的理解相关推荐

  1. IO:同步,异步,阻塞,非阻塞

    IO - 同步,异步,阻塞,非阻塞 都是老生常谈的东西,多通读几遍,理解透彻! 实际上同步与异步是针对应用程序与内核的交互而言的.同步过程中进程触发IO操作并等待(也就是我们说的阻塞)或者轮询的去查看 ...

  2. 什么是IO多路复用_IO多路复用同步异步阻塞和非阻塞

    转自:http://www.elecfans.com/baike/wangluo/fuyongqi/20180307644141.html 一.什么是socket? 我们都知道unix(like)世界 ...

  3. python网络编程基础(线程与进程、并行与并发、同步与异步、阻塞与非阻塞、CPU密集型与IO密集型)...

    python网络编程基础(线程与进程.并行与并发.同步与异步.阻塞与非阻塞.CPU密集型与IO密集型) 目录 线程与进程并行与并发同步与异步阻塞与非阻塞CPU密集型与IO密集型 线程与进程 进程 前言 ...

  4. IO中的阻塞、非阻塞、同步、异步概念分析详解

    目录 1.什么是I/O编程 2.阻塞.非阻塞.同步.异步分析 2.1 什么是同步.异步 2.2 什么是阻塞和非阻塞 2.3 阻塞.非阻塞和同步.异步的区别 2.4 编程实现 3.参考文献 1.什么是I ...

  5. Linux IO - 同步,异步,阻塞,非阻塞

    From:http://blog.csdn.net/historyasamirror/article/details/5778378 同步/异步,阻塞/非阻塞概念深度解析:http://blog.cs ...

  6. setstate是同步还是异步_谈谈 IO模型:同步、异步、阻塞、非阻塞

    同步/异步.阻塞/非阻塞 说的是一回事儿吗? 同步/异步.阻塞/非阻塞 你能通俗易懂的讲清楚吗? Java 中的 BIO.NIO.AIO 你了解吗? Socket 编程你还会吗? Linux 操作系统 ...

  7. 网络IO之阻塞、非阻塞、同步、异步总结

    1.前言 在网络编程中,阻塞.非阻塞.同步.异步经常被提到.unix网络编程第一卷第六章专门讨论五种不同的IO模型,Stevens讲的非常详细,我记得去年看第一遍时候,似懂非懂,没有深入理解.网上有详 ...

  8. 阻塞和非阻塞、同步和异步 、五种IO模型

    阻塞和非阻塞,同步和异步 1 例子 故事:老王烧开水. 出场人物:老张,水壶两把(普通水壶,简称水壶:会响的水壶,简称响水壶). 老王想了想,有好几种等待方式 1.老王用水壶煮水,并且站在那里,不管水 ...

  9. IO中同步、异步与阻塞、非阻塞的区别

    一.同步与异步 同步/异步, 它们是消息的通知机制 1. 概念解释 A. 同步 所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回. 按照这个定义,其实绝大多数函数都是同步调用(例 ...

  10. 网络编程中同步与异步,IO阻塞与非阻塞总结

    IO操作分两个阶段 第1个阶段:等待数据准备好(从外部设备磁盘或网络读到内核缓冲区): 第2个阶段:采用系统调用(内核进程),操作系统内核将数据从内核缓冲区读到用户空间. 第1阶段花费的时间远远大于第 ...

最新文章

  1. 【NLP】四万字全面详解 | 深度学习中的注意力机制(三)
  2. ActiveMQ使用spring JmsTemplate发送消息(一)
  3. post工具_GitHub CLI 命令行工具使用
  4. neo4j jdbc中文乱码
  5. JSP与Servlet传值及对比
  6. Linux管理与应用(张美平著)- 绪论知识点
  7. linux文本编辑命令vim查找,Linux编辑器vi中文本搜索与替换操作
  8. antd select show-search搜索时 拼音首字母匹配汉字模糊查询
  9. Azure:云平台概述
  10. python extractor_Day 16: Goose Extractor —— 好用的文章提取工具
  11. JAVA有percentile函数吗_Python numpy.percentile函数方法的使用
  12. C# 盘古分词的使用
  13. Criteria查询用法
  14. (个人解题思路系列)猜拳游戏
  15. SEO之了解搜索引擎
  16. Token Bucket 令牌桶算法
  17. python 读文件 如何从第二行开始
  18. python程序设计实验指导书_《Python程序设计》实验指导书.pdf
  19. Windows下清除cmd命令窗口所有的内容
  20. Unity Camera围绕物体旋转和缩放简单实现

热门文章

  1. UNCTF2022-公开赛|MISC(下)
  2. 使用超临界二氧化碳进行精密表面清洁
  3. 利用python进行数据分析数据集_《利用Python进行数据分析》终章·数据分析案例·学习笔记(二)...
  4. HTML(一):行级标签、块级标签、其他标签
  5. 英语 计算机水平怎么填写,计算机水平一般怎么填
  6. 大数据时代之市场调研的必要性
  7. Wind量化接口常用错误状态码
  8. c语言程序转python_使用f2py将C语言的函数转换为python模块
  9. Java学习第7篇_supper关键字
  10. web综合 限时秒杀效果的制作