io-同步 异步 阻塞 非阻塞
同步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-同步 异步 阻塞 非阻塞相关推荐
- 聊聊对不同I/O模型的理解 (阻塞/非阻塞IO,同步/异步IO)
一.关于I/O模型的问题 最近通过对ucore操作系统的学习,让我打开了操作系统内核这一黑盒子,与之前所学知识结合起来,解答了长久以来困扰我的关于I/O的一些问题. 1. 为什么redis能以单工作线 ...
- 异步就是异步,根本就没有 异步非阻塞IO这个说法。阻塞 非阻塞,同步I/O 异步I/O 的区别
先给大家安利一下这个 https://www.ibm.com/developerworks/cn/linux/l-async/ 里面关于 异步非阻塞IO 是错的. 异步就是异步,别扯 异步阻塞 异步非 ...
- Java网络编程------IO模型的同步/异步/阻塞/非阻塞(1)
IO模型的同步/异步/阻塞/非阻塞 一.同步/异步/阻塞/非阻塞 1.同步和异步 2.阻塞和非阻塞 3.同步.异步和阻塞.非阻塞组合 二.IO 1.I/O 2.阻塞IO和非阻塞IO 3.同步IO和同步 ...
- 异步通知是什么意思_一次相亲经历,我彻底搞懂了阻塞非阻塞、同步异步
看到标题,可能你会想,相亲跟阻塞/非阻塞,同步/异步有啥关系,这个逗b不知道在想什么东西.不要急,且听我慢慢道来 年纪大了,一回家七大姑八大姨就各种催婚,都说要给我介绍女朋友.这不,刚刚门口,我的大姨 ...
- 迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章(快快珍藏)...
常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数据,然后使用适合的视图展示详情数据. 如果网速很慢,代码发起一个HTTP请求后,就卡住不动了,直到十几秒后才拿到HTT ...
- 【面试】迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章(快快珍藏)...
网上有很多讲同步/异步/阻塞/非阻塞/BIO/NIO/AIO的文章,但是都没有达到我的心里预期,于是自己写一篇出来. 常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTTP接口拿到详情数 ...
- 异步同步、阻塞非阻塞、异步回调、线程队列和协程
今天学习了异步同步.阻塞非阻塞.异步回调.线程队列和协程 一.异步同步和阻塞非阻塞 线程的三种状态: 1.就绪 2.运行 3.阻塞 阻塞:遇到了IO操作 代码卡住 无法执行下一行 CPU会切换到 ...
- NIO详解(二): BIO 浅谈 同步 异步与阻塞 非阻塞
在我们了解Java NIO/BIO的网络通信之前,我们先了解一下常用的阻塞/非阻塞模型以及同步/异步的概念 一.阻塞和非阻塞 从简单的开始,我们以经典的读取文件的模型举例.(对操作系统而言,所有的输入 ...
- 迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清楚的好文章
来源:编程新说 网上有很多讲同步/异步/阻塞/非阻塞/BIO/NIO/AIO的文章,但是都没有达到我的心里预期,于是自己写一篇出来. 常规的误区 假设有一个展示用户详情的需求,分两步,先调用一个HTT ...
- python阻塞和非阻塞_Python基础必备知识:同步异步阻塞非阻塞
一.状态介绍 在了解其他概念之前,我们首先要了解进程的几个状态.在程序运行的过程中,由于被操作系统的调度算法控制,程序会进入几个状态:就绪,运行和阻塞. 就绪(Ready)状态:当进程已分配到除CPU ...
最新文章
- Kafka如何对Topic元数据进行细粒度的懒加载、同步等待?
- Disruptor并发框架-2
- nodejs mysql 返回json_python向mysql中存储JSON及Nodejs取出
- struct sockaddr 和 sockaddr_in 的区别
- axios token失效刷新token怎么重新请求_Token 刷新并发处理解决方案
- 【数据集】PASCAL VOC2012数据集百度网盘链接
- 使用selenium调用qq游览器(基于Chrome浏览器)
- 微信小程序实战教程,适合初学者快速入门。
- 【IoT】 产品设计之结构设计:如何设计产品按键
- 阿昆的Java学习日记Day2
- win11电脑所有的浏览器都上不了网怎么解决
- 图像处理之Hobject与Mat互转
- 关于win10基础上安装ubuntu遇到的坑
- 什么是RTOS?RTOS与普通操作系统的区别
- javascript实现数字拼图
- 玩客云退出链克计划后还是会下载缓存垃圾,程序员教你如何彻底绝育玩客云老母鸡
- Linux驱动基础开发
- UE4模型整体导入流程
- ffmpeg 打开USB摄像头
- PMBOK史上最大的改版,你知道到底有什么精华嘛?
热门文章
- Caused by: android.os.NetworkOnMainThreadException错误解决办法
- DM6467T开发板领航——dmai经验谈
- struts.xml文件的配置说明
- 调度策略的测试方法及其自动化
- windows server 2008 r2虚拟机故障群集迁移
- MySQL5.7新特性——在线收缩undo表空间 (转载)
- 使用NFS 实现两台服务器间的数据备份. -- NFS 设置部分.
- android 跳转到小米手机神隐模式
- Android Studio出现UnsupportedClassVersionError Unsupported major.minor version 52.0
- String内容不能改变的理解 String的值不能修改的理解