Linux IO 同步/异步 阻塞/非阻塞
同步IO:导致请求进程阻塞,直到IO操作完成;
是内核通知我们何时进行启动IO操作,而实际的IO操作需要当前进程本身阻塞完成;
包括:阻塞式IO模型,非阻塞式IO模型,IO复用模型,信号驱动式IO模型;
异步IO:不导致请求进程阻塞;
是告知内核,内核将IO操作完成之后,通知当前进程,整个过程不需要阻塞;
POSIX的aio_系列函数,目前支持POSIX异步IO的系统比较少见;
如下图(UNP),我们从纵向看,分为两个过程:(1) 等待数据 (2) 将数据从内核复制到用户空间
可以看到前面4种同步IO虽然第一个步骤方式不尽相同,但是在第(2)步的时候均是阻塞的完成数据从内核到用户空间的复制;
而异步IO是内核来完成这两个步骤,并通知当前进程,整个过程不需要阻塞,如图最后一种方式;

下面在结合上图说明下同步IO中的这4种有什么区别,主要是体现在上述过程的第(1)阶段,即等待数据的过程;
阻塞IO:发起操作,如果数据尚未准备就绪,则一直处于阻塞状态,直到数据准备好,完成数据的复制;如上图,阻塞IO的第(1)阶段也是一个阻塞过程;
非阻塞IO:发起操作,检查数据是否准备就绪,未准备就绪立即返回,然后不断检查,直到数据准备继续,阻塞完成数据复制;如上图,非阻塞IO的第(1)阶段是一个反复检查的过程;
IO复用:自己等不如大家一起等,多个描述符添加到epoll/select中一起阻塞等待数据准备就绪,当有数据准备就绪之后,触发事件,对应阻塞完成数据复制;如上图,IO复用的第(1)阶段是阻塞在IO复用的系统调用上的过程;
信号驱动IO:注册一个SIGIO的信号处理函数,当有数据准备好的时候,产生SIGIO信号,触发信号处理函数,阻塞完成数据复制;如上图,信号驱动IO第(1)阶段不需要任何操作,只需要等待信号触发;
Linux IO 同步/异步 阻塞/非阻塞的更多相关文章
- linux基础编程:IO模型:阻塞/非阻塞/IO复用 同步/异步 Select/Epoll/AIO(转载)
		
IO概念 Linux的内核将所有外部设备都可以看做一个文件来操作.那么我们对与外部设备的操作都可以看做对文件进行操作.我们对一个文件的读写,都通过调用内核提供的系统调用:内核给我们返回一个file ...
 - 【转载】高性能IO设计 & Java NIO & 同步/异步 阻塞/非阻塞 Reactor/Proactor
		
开始准备看Java NIO的,这篇文章:http://xly1981.iteye.com/blog/1735862 里面提到了这篇文章 http://xmuzyq.iteye.com/blog/783 ...
 - 操作系统介绍-操作系统历史,IO,进程的三态,同步异步阻塞非阻塞
		
1.操作系统历史 2.进程,IO,同步异步阻塞非阻塞 操作系统历史: 手工操作: 1946年第一台计算机诞生--20世纪50年代中期,计算机工作还在采用手工操作方式.此时还没有操作系统的概念. 手工操 ...
 - 理解同步,异步,阻塞,非阻塞,多路复用,事件驱动IO
		
以下是IO的一个基本过程 先理解一下用户空间和内核空间,系统为了保护内核数据,会将寻址空间分为用户空间和内核空间,32位机器为例,高1G字节作为内核空间,低3G字节作为用户空间.当用户程序读取数据的时 ...
 - (转)同步异步,阻塞非阻塞 和nginx的IO模型
		
同步异步,阻塞非阻塞 和nginx的IO模型 原文:https://www.cnblogs.com/wxl-dede/p/5134636.html 同步与异步 同步和异步关注的是消息通信机制 (sy ...
 - Java IO 学习(一)同步/异步/阻塞/非阻塞
		
关于IO,同步/异步/阻塞/非阻塞,这几个关键词是经常听到的,譬如: “Java oio是阻塞的,nio是非阻塞的” “NodeJS的IO是异步的” 但是这些东西听多了就容易迷糊,比方说同步是否就是阻 ...
 - python并发编程之IO模型 同步 异步 阻塞 非阻塞
		
IO浅谈 首先 我们在谈及IO模型的时候,就必须要引入一个“操作系统”级别的调度者-系统内核(kernel),而阻塞非阻塞是跟进程/线程严密相关的,而进程/线程又是依赖于操作系统存在的,所以自然不能脱 ...
 - 转:IO模型-- 同步和阻塞,异步和非阻塞的区别
		
源地址 http://hi.baidu.com/deep_pro/item/db0c581af1c1f17e7b5f2534 这些词之间的区别难倒了很多人,还有什么同步阻塞, 同步非阻塞, 异步阻塞, ...
 - 深入了解几种IO模型(阻塞非阻塞,同步异步)
		
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/zk3326312/article/details/79400805一般来说,Linux下系统IO主要 ...
 
随机推荐
- CCF-NOIP-2018 提高组(复赛) 模拟试题(九)(2018 CSYZ长沙一中)
			
T1 Circle [问题描述] 小 w 的男朋友送给小 w 一个 n 个点 m 条边的图,并且刁难小 w 要她找出点数最少的正环. 小 w 不会做,于是向你求助. [输入格式] 第一行两个整数\(n ...
 - GraphSAGE 代码解析(三) - aggregators.py
			
原创文章-转载请注明出处哦.其他部分内容参见以下链接- GraphSAGE 代码解析(一) - unsupervised_train.py GraphSAGE 代码解析(二) - layers.py ...
 - 在 C/C++ 中使用 TensorFlow 预训练好的模型—— 间接调用 Python 实现
			
现在的深度学习框架一般都是基于 Python 来实现,构建.训练.保存和调用模型都可以很容易地在 Python 下完成.但有时候,我们在实际应用这些模型的时候可能需要在其他编程语言下进行,本文将通过 ...
 - Spring Security 5.0.x 参考手册 【翻译自官方GIT-2018.06.12】
			
源码请移步至:https://github.com/aquariuspj/spring-security/tree/translator/docs/manual/src/docs/asciidoc 版 ...
 - OJ题归纳
			
1.求最大公约数 利用辗转相除法求最大公约数 int gcd(int a,int b) { int c,r; if(a<b){c=a;a=b;b=c;} if(b==0) return a; r ...
 - chromium源码阅读
			
linux下chromium的入口函数在文件:src/chrome/app/chrome_exe_main_aura.cc 中 int main(int argc, const char** argv ...
 - Android EditText 限制输入字符
			
今天为简单的登录界面的输入框(用户名.密码框,验证码),均为EditText框,做输入限制,不能有空格,不能有一些特殊字符,不多说,直接上代码: /** * 禁止EditText输入空格 * * @p ...
 - stap中的entry函数
			
只有在ret probe函数中,在这个函数中才会使用@entry函数去提取变量 是因为ret probe 有什么特殊的吗?在中间这个变量会变化吗? A new operator, @entry, is ...
 - request.getParameterMap() 获取表单提交的键值对  并且 也能获取动态表单的key
			
Map<String,String[]> map = request.getParameterMap();Set<String> keys = map.keySet(); 获取 ...
 - elasticsearch-1.7.1 (es Windows 64)
			
elasticsearch-1.7.1 (es Windows 64) https://blog.csdn.net/qq_27093465/article/details/53544541 elast ...