阻塞式/非阻塞式与同步/异步的区别

简介: 阻塞式/非阻塞式与同步/异步的区别

阻塞式IO/非阻塞IO

阻塞式IO(blocking-IO)

默认情况下,所有的套接字socket连接都是阻塞式的,在和操作系统交互的过程之中。比如说一个读操作:

1.因为涉及到网络数据交换network io,等待所有的分组报到达之后这时候数据才算在操作系统内部为就绪状态。

2.然后操作系统在从系统空间将数据拷贝到用户空间。

6b6810f2db389417149651bd86fc082c.png

首先进行IO数据交换的时候是由两个进程交互的,一个是用户的application进程另外一个是操作系统的内核进程,阻塞强调的是在用户进程发起数据调用请求到操作系统kernal之后,需要等待操作系统(准备数据+拷贝数据)在这个过程中用户进程是被锁定的或者说成阻塞的(blocking),也就是什么也不能做,两个步骤结束之后,kernal才会告诉application应用,你请求的数据已经为你准备好了,这时候用户进程才可以进行下面的操作。


非阻塞式IO(No blocking-IO)

b1a94cf140daa76797c0936dc4636875.png

同样的对于客户端的一个read操作,当客户端发起read request的时候,如果kernal这时候还没有将待拷贝的数据准备好,那么则会直接返回系统错误的状态,用户端判断这个状态之后就知道了,现在kernal并没有准备好数据,我并不能立马读取数据,那么什么时候才能读取呢?只有再次向kernal发起同样的请求这时候(这个过程因为每次请求会立即得到返回,所以对于客户端来说并不是非阻塞的或者说锁定的,客户端可以在这个过程中做其他事情),看看kernal有没有准备好,若是准备好了那么则将数据从系统空间拷贝到用户内存当中去(这个阶段是阻塞的)。


同步IO/异步IO

A synchronous I/O operation causes the requesting process to be blocked until that I/O operation completes;

An asynchronous I/O operation does not cause the requesting process to be blocked;

I/O operation= wait for data + copy data from kernal to user

异步IO(asynchronous IO)

 c1cf32d8839f27aa1a71a8b98b2e7ce1.jpg

去考虑进行IO交互的那两个应用,user application和kernal application,同步IO每次IO请求都是由user主动发起,被动的等待kernal的返回结果,当获悉kernal明确的处理状态之后才可以进行后续操作。而异步IO则是每次user application发起调用请求之后,kernal会立即返回,好似每次请求到kernal只后kernal就会告诉你,好了我知道你需要数据,等我准备好了我就会告诉你,你先去忙吧。


可以看出来同步和异步的区别就是在于,客户端请求完成之后到kernal的IO operation完成这个过程中客户端是不是阻塞或者锁定状态,如果是则是同步,否则则是异步。


比较:

d4875ef1a9451576eb110e82c4ab5a0b.png


目录
相关文章
|
10月前
|
API iOS开发
彻底搞懂同步与异步,阻塞/非阻塞
彻底搞懂同步与异步,阻塞/非阻塞
1946 0
理解阻塞、非阻塞与同步、异步的区别
理解阻塞、非阻塞与同步、异步的区别
理解阻塞、非阻塞与同步、异步的区别
阻塞/阻塞/同步/异步
咱就说有没有一种可能,同步、异步、阻塞、非阻塞,这几个关键词拆开看都感觉挺明白的。但是同步阻塞、同步非阻塞、异步阻塞、异步非阻塞,这几个关键词组装起来,看起来就有点那么晦涩了。这个在日常八股中经常出现字眼,其背后对应的到底是个什么样的逻辑?我们来一起揭开它那不那么神秘的面纱。/手动狗头。
133 0
阻塞/阻塞/同步/异步
网络基础 - 同步、异步、阻塞、非阻塞
网络基础 - 同步、异步、阻塞、非阻塞
219 0
|
缓存 Java
同步 异步 阻塞 非阻塞
在高性能的IO体系设计中,有几个名词概念常常会使我们感到迷惑不解。具体如下:  序号 问题 1 什么是同步? 2 什么是异步? 3 什么是阻塞? 4 什么是非阻塞? 5 什么是同步阻塞? 6 什么是同步非阻塞? 7 什么是异步阻塞? 8 什么是异步非阻塞? 散仙不才,在查了一部分资料后,愿试着以通俗易懂的方式
1900 1
同步、异步、阻塞、非阻塞
同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication) 真正意义上的 异步IO 是说内核直接将数据拷贝至用户态的内存单元,再通知程序直接去读取数据。
1018 0
同步,异步,阻塞和非阻塞
同步,异步,阻塞和非阻塞的理解
1673 0
|
调度 网络协议 算法
深入理解并发/并行,阻塞/非阻塞,同步/异步
1. 阻塞,非阻塞 首先,阻塞这个词来自操作系统的线程/进程的状态模型中,如下图: 一个线程/进程经历的5个状态,创建,就绪,运行,阻塞,终止。
1488 0

热门文章

最新文章