异步io是kernel帮你的线程盯着该线程所要的数据是否可用,而线程可以去做别的事情。当数据可用时kernel通知你的线程。需要利用事件等机制来完成。

同步io是你的线程自己去向内核查询所要的数据是否可用。在查询的时候,数据不可用的话:
如果内核将这个线程塞进等待队列,直到数据可用时,内核将线程加进可运行队列,并将可用数据给它,则是阻塞型io;
如果内核不将其塞进等待队列,而是直接给他一个error代码表示数据不可用,则是非阻塞io。执行非阻塞型io的线程需要一遍一遍的去询问内核数据是否可用,否则它可能读不到可用的数据。

可见-同步 异步 阻塞 非阻塞的关系。
①异步同步是指线程对数据获取的方式而言的,
异步:内核主动通知线程,
同步:线程主动询问内核。

②而阻塞非阻塞是在线程主动询问内核时,内核对线程的不同处理方式。所以阻塞非阻塞都是在同步的情况下发生的。


|----异步
|----同步|-----阻塞
             |-----非阻塞

执行同步io时,就是直接向内核索取数据,非阻塞io(r如read函数)会立即返回,阻塞io(如read函数)则在数据可用时返回。线程中需要对返回值检查,返回值一般是数据不可用时的错误代码或可用数据。
执行异步io时,就像向内核提交一个"申请当数据可用时的事件通知"的服务(所以可以立即返回),所以需要向内核提交一个事件参数,当数据可用时,内核自动触发该事件。

当然执行异步io的谈不上阻塞非阻塞,因为他在执行异步io(比如read)时内核没机会没理由将它阻塞。

http://blog.csdn.net/historyasamirror/article/details/5778378

转载于:https://www.cnblogs.com/-song/archive/2011/10/28/3331938.html

io-同步 异步 阻塞 非阻塞相关推荐

  1. 聊聊对不同I/O模型的理解 (阻塞/非阻塞IO,同步/异步IO)

    一.关于I/O模型的问题 最近通过对ucore操作系统的学习,让我打开了操作系统内核这一黑盒子,与之前所学知识结合起来,解答了长久以来困扰我的关于I/O的一些问题. 1. 为什么redis能以单工作线 ...

  2. 异步就是异步,根本就没有 异步非阻塞IO这个说法。阻塞 非阻塞,同步I/O 异步I/O 的区别

    先给大家安利一下这个 https://www.ibm.com/developerworks/cn/linux/l-async/ 里面关于 异步非阻塞IO 是错的. 异步就是异步,别扯 异步阻塞 异步非 ...

  3. Java网络编程------IO模型的同步/异步/阻塞/非阻塞(1)

    IO模型的同步/异步/阻塞/非阻塞 一.同步/异步/阻塞/非阻塞 1.同步和异步 2.阻塞和非阻塞 3.同步.异步和阻塞.非阻塞组合 二.IO 1.I/O 2.阻塞IO和非阻塞IO 3.同步IO和同步 ...

  4. 异步通知是什么意思_一次相亲经历,我彻底搞懂了阻塞非阻塞、同步异步

    看到标题,可能你会想,相亲跟阻塞/非阻塞,同步/异步有啥关系,这个逗b不知道在想什么东西.不要急,且听我慢慢道来 年纪大了,一回家七大姑八大姨就各种催婚,都说要给我介绍女朋友.这不,刚刚门口,我的大姨 ...

  5. 迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章(快快珍藏)...

    常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数据,然后使用适合的视图展示详情数据. 如果网速很慢,代码发起一个HTTP请求后,就卡住不动了,直到十几秒后才拿到HTT ...

  6. 【面试】迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章(快快珍藏)...

    网上有很多讲同步/异步/阻塞/非阻塞/BIO/NIO/AIO的文章,但是都没有达到我的心里预期,于是自己写一篇出来. 常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数 ...

  7. 异步同步、阻塞非阻塞、异步回调、线程队列和协程

    今天学习了异步同步.阻塞非阻塞.异步回调.线程队列和协程 一.异步同步和阻塞非阻塞 线程的三种状态: 1.就绪 2.运行 3.阻塞 阻塞:遇到了IO操作  代码卡住  无法执行下一行  CPU会切换到 ...

  8. NIO详解(二): BIO 浅谈 同步 异步与阻塞 非阻塞

    在我们了解Java NIO/BIO的网络通信之前,我们先了解一下常用的阻塞/非阻塞模型以及同步/异步的概念 一.阻塞和非阻塞 从简单的开始,我们以经典的读取文件的模型举例.(对操作系统而言,所有的输入 ...

  9. 迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章

    来源:编程新说 网上有很多讲同步/异步/阻塞/非阻塞/BIO/NIO/AIO的文章,但是都没有达到我的心里预期,于是自己写一篇出来. 常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTT ...

  10. python阻塞和非阻塞_Python基础必备知识:同步异步阻塞非阻塞

    一.状态介绍 在了解其他概念之前,我们首先要了解进程的几个状态.在程序运行的过程中,由于被操作系统的调度算法控制,程序会进入几个状态:就绪,运行和阻塞. 就绪(Ready)状态:当进程已分配到除CPU ...

最新文章

  1. Kafka如何对Topic元数据进行细粒度的懒加载、同步等待?
  2. Disruptor并发框架-2
  3. nodejs mysql 返回json_python向mysql中存储JSON及Nodejs取出
  4. struct sockaddr 和 sockaddr_in 的区别
  5. axios token失效刷新token怎么重新请求_Token 刷新并发处理解决方案
  6. 【数据集】PASCAL VOC2012数据集百度网盘链接
  7. 使用selenium调用qq游览器(基于Chrome浏览器)
  8. 微信小程序实战教程,适合初学者快速入门。
  9. 【IoT】 产品设计之结构设计:如何设计产品按键
  10. 阿昆的Java学习日记Day2
  11. win11电脑所有的浏览器都上不了网怎么解决
  12. 图像处理之Hobject与Mat互转
  13. 关于win10基础上安装ubuntu遇到的坑
  14. 什么是RTOS?RTOS与普通操作系统的区别
  15. javascript实现数字拼图
  16. 玩客云退出链克计划后还是会下载缓存垃圾,程序员教你如何彻底绝育玩客云老母鸡
  17. Linux驱动基础开发
  18. UE4模型整体导入流程
  19. ffmpeg 打开USB摄像头
  20. PMBOK史上最大的改版,你知道到底有什么精华嘛?

热门文章

  1. Caused by: android.os.NetworkOnMainThreadException错误解决办法
  2. DM6467T开发板领航——dmai经验谈
  3. struts.xml文件的配置说明
  4. 调度策略的测试方法及其自动化
  5. windows server 2008 r2虚拟机故障群集迁移
  6. MySQL5.7新特性——在线收缩undo表空间 (转载)
  7. 使用NFS 实现两台服务器间的数据备份. -- NFS 设置部分.
  8. android 跳转到小米手机神隐模式
  9. Android Studio出现UnsupportedClassVersionError Unsupported major.minor version 52.0
  10. String内容不能改变的理解 String的值不能修改的理解