看完就明白什么是同步/异步阻塞/非阻塞(代码片段)

muxuanchan muxuanchan     2023-01-07     297

关键词:

  相信干IT的或多或少都听说过同步、异步、阻塞、非阻塞这四个词,它们也可以分成两对,也就是同步、异步一对,阻塞、非阻塞一对,这个看词义就很好理解。关键问题在于同步和阻塞、异步和非阻塞之间的区别,很多人对这两组概念有点分不清,感觉意思差不多,其实它们描述的是两个不同的问题,我们用一个具体的场景来描述一下这四个词,用真实的生活场景感受一下它们的不同。

  我们应该都有过去银行柜台办理业务的经历,当人很多的时候往往要排队等待,那么这时候就可能出现这四种情况:

  在柜台前排队一直等在那里办理业务(同步),在等到办理业务前不做任何其他事情(阻塞);

  在柜台前排队一直等在那里办理业务(同步),在等到办理业务前做其他事情,比如玩手机,玩手机的时候需要不时地去看是否已经排队排到了(非阻塞);

  去取号机上拿个号,当轮到办理业务的时候会叫号,不用一直等在那里(异步),在叫号办理业务前不做任何其他事情(阻塞);

  去取号机上拿个号,当轮到办理业务的时候会叫号,不用一直等在那里(异步),在叫号办理业务前做其他事情,比如玩手机,玩手机的时候不用关心是否排队排到了,因为会叫号通知我(非阻塞);  

  通过去银行柜台办理业务的场景我们可以发现同步/异步、阻塞/非阻塞之间关注的点不一样,同步/异步关注的是消息如何通知,在上面那个场景里就是两种不同的通知方式:同步通知方式是由排队人一直等消息,异步通知方式是由叫号机发送消息来通知,排队人无需关注消息,这是同步/异步之间的主要区别。阻塞/非阻塞关注的是等待消息通知时的状态,阻塞的时候排队人的状态不变一直等着,非阻塞的时候可以变成其他非等待状态,如看手机,出去抽烟等。需要特别说明一下的是同步非阻塞这种状态,可以发现在做其他事情的时候需要不停的检查等待结果,所以这里存在一个任务切换引起的资源消耗问题。

  现在我们来总结一下同步/异步、阻塞/非阻塞之间的区别:同步和异步仅仅是关注的消息如何通知的机制,而阻塞与非阻塞关注的是等待消息通知时的状态。也就是说,同步的情况下,是由处理消息者自己去等待消息是否被触发,而异步的情况下是由触发机制来通知处理消息者。

  相信看完上文你已经基本搞清楚同步/异步、阻塞/非阻塞的概念了,接下来我们通过一个生活实例来巩固复习一下,看看自己是否真的已经掌握。

  平时大家都会上网下载一些东西,这里就假设我要下载一个视频,我们用这个场景再来复习一下同步/异步、阻塞/非阻塞的概念:

  我通过看下载精度条等待下载完成的结果(同步),期间不做其他事情(阻塞)

  我通过看下载精度条等待下载完成的结果(同步),期间去聊QQ,在聊QQ的时候不停地去看下载是否完成(非阻塞)

  通过下载完成的提示音通知得到下载完成的结果(异步),期间不做其他事情(阻塞)

  通过下载完成的提示音通知得到下载完成的结果(异步),期间去聊QQ,在聊QQ的时候不需要去看下载是否完成,因为下载完了提示音会通知我(非阻塞)

  最后,需要注意理解的是“消息通知机制”“等待消息通知时的状态”这两个概念,这是理解同步/异步、阻塞/非阻塞四个概念的关键所在。还有我们在讨论这四个概念的时候一定要放在同一个层级,比如操作系统级别,框架级别,业务代码级别等,因为一个事件在不同层级所属的性质不一定一样,只有在同一个层级,才能去讨论它的性质是同步/异步还是阻塞/非阻塞。







正确理解同步/异步和阻塞/非阻塞的区别:(代码片段)

...文章觉得说的总是差点意思,下面是个人理解:1.同步非同步阻塞非阻塞概念怎样理解阻塞非阻塞与同步异步的区别?-知乎2.同步/非同步和阻塞/非阻塞的区别:同步异步阻塞非阻塞区别_流水随波落花逐流的博客-CSDN博... 查看详情

text同步,异步,阻塞,非阻塞(代码片段)

查看详情

转:聊聊同步异步阻塞与非阻塞(代码片段)

...细考究过的原因吧。经过看了些这几个概念的资料,发现同步、异步、阻塞、非阻 查看详情

死磕nio—阻塞非阻塞同步异步,傻傻分不清楚(代码片段)

...件就可以了,我们还需要掌握一些基本概念,如什么是IO,5种IO模型的区别,什么是阻塞&非阻塞等等,只有掌握了这些基本概念,我们对NIO才能理解得更加得心应手。这篇文 查看详情

死磕nio—阻塞非阻塞同步异步,傻傻分不清楚(代码片段)

...件就可以了,我们还需要掌握一些基本概念,如什么是IO,5种IO模型的区别,什么是阻塞&非阻塞等等,只有掌握了这些基本概念,我们对NIO才能理解得更加得心应手。这篇文 查看详情

同步/异步,阻塞/非阻塞

什么是同步和异步同步和异步是针对应用程序和内核的交互而言的,同步指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪,而异步是指用户进程触发IO操作以后便开始做自己的事情,而当IO操作已经完成的时候... 查看详情

reactor和proactor模式的讲解(关于异步,同步,阻塞与非阻塞)

...用于异步I/O操作。在比较这两个模式之前,我们首先的搞明白几个概念,什么是阻塞和非阻塞,什么是同步和异步,同步和异步是针对应用程序和内核的交互而言的,同步指的是用户进程触发IO操作并等待或者轮询的去查看IO操作... 查看详情

同/异步,阻塞/非阻塞傻傻分不清楚?

.../article/details/8458299在比较这两个模式之前,我们首先的搞明白几个概念,什么是阻塞和非阻塞,什么是同步和异步;      同步和异步是针对应用程序和内核的交互而言的;     &n 查看详情

阻塞非阻塞同步异步io(代码片段)

阻塞、非阻塞、同步、异步IOhttp://www.cnblogs.com/yunxitalk/p/9031306.html介绍在谈及网络IO的时候总避不开阻塞、非阻塞、同步、异步、IO多路复用、select、poll、epoll等这几个词语。在面试的时候也会被经常问到这几个的区别。本文就来... 查看详情

io之间的比较

...望告知。 在弄清楚上面的几个问题之前,我们首先得明白什么是同步,异步,阻塞 查看详情

深入理解并发/并行,阻塞/非阻塞,同步/异步(代码片段)

1、阻塞,非阻塞首先,阻塞这个词来自操作系统的线程/进程的状态模型中,如下图:一个线程/进程经历的5个状态,创建,就绪,运行,阻塞,终止。各个状态的转换条件如上图,其中有个阻塞状态,就是说当线程中调用某个... 查看详情

异步/同步,阻塞/非阻塞,单线程/多线程概念梳理(代码片段)

...正.这三个概念我认为是描述不同的维度的,概念正交.异步同步异步和同步是不同的流程设计风格.但存在依赖关系的操作之间是同步的,也就是如果操作B依赖操作A的返回,那么B必须要在A结束后才能执行.比如你要读取文件然后对文... 查看详情

关于网络io中的同步异步阻塞非阻塞(代码片段)

...bev,它们对大规模的HTTP请求处理的都很好。那么到底什么是异步、非阻塞,它们的原理是什么,它们之间又有什么区别呢?其实在很多情况下,异步与非阻塞(同步与阻塞)表示的是同一个意思,但是在特定... 查看详情

阻塞&非阻塞|同步&异步(代码片段)

这里讲的都是基于IO的阻塞、非阻塞、同步、异步一个典型的IO操作包括了两个阶段,数据准备和数据读写。比如说现在要使用recv执行一个读操作,数据就绪就是远端是否有数据可读。当IO工作在阻塞状态下的时候,... 查看详情

阻塞&非阻塞|同步&异步(代码片段)

这里讲的都是基于IO的阻塞、非阻塞、同步、异步一个典型的IO操作包括了两个阶段,数据准备和数据读写。比如说现在要使用recv执行一个读操作,数据就绪就是远端是否有数据可读。当IO工作在阻塞状态下的时候,... 查看详情

死磕nio—阻塞非阻塞同步异步,傻傻分不清楚(代码片段)

...件就可以了,我们还需要掌握一些基本概念,如什么是IO,5种IO模型的区别,什么是阻塞&非阻塞等等,只有掌握了这些基本概念,我们对NIO才能理解得更加得心应手。这篇文章我们就从阻塞&非阻塞&#x... 查看详情

详解同步异步阻塞非阻塞与bionioaio区别多路复用(代码片段)

...Stringmessage=newString(bytes,0,len,"UTF-8");//省略……二、同步与异步同步和异步指的是:假设我们的执行流程中:依次是方法一和方法二同步与异步是从多个线程之间的协调来实现效率差异三、阻塞与非阻塞阻塞与非阻塞主要是... 查看详情

利用tornado使请求实现异步非阻塞(代码片段)

基本IO模型网上搜了很多关于同步异步,阻塞非阻塞的说法,理解还是不能很透彻,有必要买书看下。参考:使用异步I/O大大提高应用程序的性能怎样理解阻塞非阻塞与同步异步的区别?同步和异步:主要关注消息通信机制(重... 查看详情