精华内容
下载资源
问答
  • 同步异步和阻塞非阻塞的区别

    请参考一下内容:
    在这里插入图片描述

    展开全文
  • 其实,同步包括了 同步阻塞 和 同步非阻塞 ,异步也包括了 异步阻塞 和 异步非阻塞 。在这里我先介绍阻塞/非阻塞的概念,然后把它们分别融入到同步/异步的情况中去讲解。 阻塞/非阻塞: 阻塞和非阻塞关注的是...

     同步/异步 和 阻塞/非阻塞 之间具有相关性,通常情况下为 同步阻塞 以及 异步非阻塞 ,所以很容易把同步和阻塞混淆,把异步和非阻塞混淆。

    其实,同步包括了 同步阻塞 和 同步非阻塞 ,异步也包括了 异步阻塞 和 异步非阻塞 。我先简单介绍阻塞/非阻塞的概念,然后分别对应到同步/异步的情况中。(如果我的理解有误,请帮我指出,感激不尽)

     

    阻塞/非阻塞:

    阻塞和非阻塞关注的是程序(线程)在执行过程中调用了另一个程序,在等待调用结果(消息,返回值)时的状态。

    阻塞:指调用结果返回之前,当前线程会被挂起,不能进行后续操作。
    非阻塞:指调用结果返回之前,当前线程还可以继续进行后续操作。

     

    同步和异步:

    同步和异步则关注任务(线程)之间的一种消息通信机制或是一种协作方式

    同步:指的是一个任务在执行过程中调用了另一个任务并依赖于它的返回结果,在没有得到返回结果前该任务不会返回(结束)

    此时,若该任务在等待返回结果的过程中不能继续执行后续操作,只是在等待的话,则称之为同步阻塞;若该任务在等待返回结果的过程中可以继续执行后续操作,只是不能返回(结束)的话,则称为同步非阻塞。

    异步:指的是一个任务在执行过程中调用了另一个任务,但只告诉另一个任务如何执行,而不依赖它的返回结果,该任务可以先返回(结束)

    类似的,此时若任务不能继续执行后续操作则称为异步阻塞;若可以继续执行后续操作则称为异步非阻塞,执行完后可以先返回。

     

    如何区别:

    个人认为区别阻塞/非阻塞和同步/异步的关键是:

    阻塞/非阻塞关注的是任务(线程)在调用其他任务后是否被挂起,还能否继续执行其他操作,能的话为非阻塞,不能的话为阻塞。

    同步/异步关注的是任务(线程)在调用其他任务后是否能先返回(结束),能先结束的话为异步,不能的话为同步。

    展开全文
  • 一、同步和异步 同步和异步是一种 消息通知机制 同步:发出一次请求后必须等到该请求有返回结果,才能继续下一步工作;请求者需主动询问是否有返回结果; 异步:发出一次请求后无需等到该请求有返回结果,即可进行...

    一、同步和异步

    同步异步是一种 消息通知机制

    • 同步:发出一次请求后必须等到该请求有返回结果,才能继续下一步工作;请求者需主动询问是否有返回结果;
    • 异步:发出一次请求后无需等到该请求有返回结果,即可进行下一步工作;请求有结果后,会以某种方式通知请求者;

    同步和异步是相对于操作结果来说,会不会等待结果返回

    异步一般通过状态、通知和回调来通知调用者。
    状态:即监听被调用者的状态(轮询),调用者需要每隔一定时间检查一次,效率会很低。
    通知:当被调用者执行完成后,发出通知告知调用者,无需消耗太多性能。
    回调:与通知类似,当被调用者执行完成后,会调用调用者提供的回调函数。

    场景比喻:
    举个例子,去银行办理业务,可能会有两种方式:排队等候和排号等别人通知

    • 前者(排队等候)就是同步等待消息通知,也就是我要一直在等待银行办理业务情况;
    • 后者(排号,等待别人通知)就是异步等待消息通知。在异步消息处理中,等待消息通知者(在这个例子中就是等待办理业务的人)往往注册一个回调机制,在所等待的事件被触发时由触发机制(在这里是柜台的人)通过某种机制(在这里是写在小纸条上的号码,喊号)找到等待该事件的人。

    二、阻塞和非阻塞

    阻塞、非阻塞,是程序等待调用结果时的状态

    • 阻塞:发出一次请求后,在未得到返回结果前,线程挂起,这期间线程无法做其他事情;
    • 非阻塞:发出一次请求后,在未得到返回结果前,线程不会挂起,这期间线程可以做其他事情;

    阻塞和非阻塞这两个概念与程序(线程)等待消息通知(无所谓同步或者异步)时的状态有关。也就是说阻塞与非阻塞主要是程序(线程)等待消息通知时的状态角度来说的。

    场景比喻:

    • 阻塞。继续上面的那个例子,不论是排队还是使用号码等待通知,如果在这个等待的过程中,等待者除了等待消息通知之外不能做其它的事情,那么该机制就是阻塞的,表现在程序中,也就是该程序一直阻塞在该函数调用处不能继续往下执行。

    • 非阻塞。相反,有的人喜欢在银行办理这些业务的时候一边打打电话发发短信一边等待,这样的状态就是非阻塞的,因为他(等待者)没有阻塞在这个消息通知上,而是一边做自己的事情一边等待。

    同步异步阻塞非阻塞总结:

    • 同步机制 发送方发送请求之后,需要等接收方发回响应后才接着发
    • 异步机制 发送方发送一个请求之后不等待接收方响应这个请求,就继续发送下个请求。
    • 阻塞调用调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回,该线程在此过程中不能进行其他处理
    • 非阻塞调用调用结果不能马上返回,当前线程也不会被挂起,而是立即返回执行下一个调用。(网络通信中主要指的是网络套接字Socket的阻塞和非阻塞方式,而soket 的实质也就是IO操作)

    区分开同步异步阻塞非阻塞,同步异步说的是被调用者结果返回时通知进程的一种通知机制,阻塞非阻塞说的是调用结果返回前进程的状态,是挂起还是继续处理其他任务。

    三、同步异步阻塞非阻塞组合应用

    • 同步阻塞方式: 发送方向接收方发送请求后,一直等待响应;接收方处理请求时进行的IO操作如果不能马上得到结果,就一直等到返回结果后,才响应发送方,期间不能进行其他工作。这种方式实现简单,但是效率最低

    • 同步非阻塞方式:发送方向接收方发送请求后,一直等待响应;接收方处理请求时进行的IO操作如果不能马上得到结果,就立即返回,去做其他事情,但由于没有得到请求处理结果,不响应发送方,发送方一直等待。一直到IO操作完成后,接收方获得结果响应发送方后,接收方才进入下一次请求过程。在实际中不使用这种方式。

    • 异步阻塞方式:发送方向接收方发送请求后,不用等待响应,可以接着进行其他工作;接收方处理请求时进行的IO操作如果不能马上得到结果,就一直等到返回结果后,才响应发送方,期间不能进行其他工作。这种方式在实际中也不使用。

    • 异步非阻塞方式:发送方向接收方请求后,不等待响应,可以继续其他工作,接收方处理请求时进行IO操作如果不能马上得到结果,也不等待,而是马上返回取做其他事情。当IO操作完成以后,将完成状态和结果通知接收方,接收方在响应发送方。效率最高

    场景比喻:

    对上面所讲的概念再次进行一个场景梳理,上面已经明确说明,同步/异步关注的是消息通知的机制,而阻塞/非阻塞关注的是程序(线程)等待消息通知时的状态。以小明下载文件打个比方,从这两个关注点来再次说明这两组概念,希望能够更好的促进大家的理解。

    1. 同步阻塞:
    小明一直盯着下载进度条,到 100% 的时候就完成。
    ①同步体现在:等待下载完成通知;
    ②阻塞体现在:等待下载完成通知过程中,不能做其他任务处理;

    2. 同步非阻塞:
    小明提交下载任务后就去干别的,每过一段时间就去瞄一眼进度条,看到 100% 就完成。
    ①同步体现在:等待下载完成通知;
    ②非阻塞体现在:等待下载完成通知过程中,去干别的任务了,只是时不时会瞄一眼进度条;小明必须要在两个任务间切换,关注下载进度

    3. 异步阻塞:
    小明换了个有下载完成通知功能的软件,下载完成就“叮”一声。不过小明仍然一直等待“叮”的声音(看起来很傻)。
    ①异步体现在:下载完成“叮”一声通知;
    ②阻塞体现在:等待下载完成“叮”一声通知过程中,不能做其他任务处理;

    4. 异步非阻塞:
    仍然是那个会“叮”一声的下载软件,小明提交下载任务后就去干别的,听到“叮”的一声就知道完成了。
    ①同步体现在:下载完成“叮”一声通知;
    ②非阻塞体现在:等待下载完成“叮”一声通知过程中,去干别的任务了,只需要接收“叮”声通知即可;软件处理下载任务,小明处理其他任务,不需关注进度,只需接收软件“叮”声通知,即可

    也就是说,同步/异步是“下载完成消息”通知的方式(机制),而阻塞/非阻塞则是在等待“下载完成消息”通知过程中的状态(能不能干其他任务),在不同的场景下,同步/异步、阻塞/非阻塞的四种组合都有应用。

    所以,综上所述,同步和异步仅仅是关注的消息如何通知的机制,而阻塞与非阻塞关注的是等待消息通知时的状态。也就是说,同步的情况下,是由处理消息者自己去等待消息是否被触发,而异步的情况下是由触发机制来通知处理消息者,所以在异步机制中,处理消息者和触发机制之间就需要一个连接的桥梁:

    在银行的例子中,这个桥梁就是小纸条上面的号码。
    在小明的例子中,这个桥梁就是软件“叮”的声音。

    最后,请大家注意理解“消息通知机制”和“等待消息通知时的状态”这两个概念,这是理解四个概念的关键所在。

    参考:https://www.jianshu.com/p/252a522517f9

    四、其它理解

    原文链接:https://blog.csdn.net/linhuaiyang/article/details/68483222
    网上找了一篇总结的很简洁清晰,已粘贴原文内容如下:

    同步、异步:
    • 概念:消息的通知机制
    • 解释:涉及到IO通知机制;所谓同步,就是发起调用后,被调用者处理消息,必须等处理完才直接返回结果,没处理完之前是不返回的,调用者主动等待结果;所谓异步,就是发起调用后,被调用者直接返回,但是并没有返回结果,等处理完消息后,通过状态、通知或者回调函数来通知调用者,调用者被动接收结果。
    阻塞、非阻塞:
    • 概念:程序等待调用结果时的状态
    • 解释:涉及到CPU线程调度;所谓阻塞,就是调用结果返回之前,该执行线程会被挂起,不释放CPU执行权,线程不能做其它事情,只能等待,只有等到调用结果返回了,才能接着往下执行;所谓非阻塞,就是在没有获取调用结果时,不是一直等待,线程可以往下执行,如果是同步的,通过轮询的方式检查有没有调用结果返回,如果是异步的,会通知回调。

    经典故事案例:

    • 人物:老张
    • 道具:普通水壶(水烧开不响);响水壶(水烧开发出响声)
    • 案例
     1、同步阻塞:
           老张在厨房用普通水壶烧水,一直在厨房等着(阻塞),盯到水烧开(同步);
     2、异步阻塞:
           老张在厨房用响水壶烧水,一直在厨房中等着(阻塞),直到水壶发出响声(异步),老张知道水烧开了;
     3、同步非阻塞:
           老张在厨房用普通水壶烧水,在烧水过程中,就到客厅去看电视(非阻塞),然后时不时去厨房看看水烧开了没(轮询检查同步结果);
     4、异步非阻塞:
           老张在厨房用响水壶烧水,在烧水过程中,就到客厅去看电视(非阻塞),当水壶发出响声(异步),老张就知道 水烧开了。
    
    展开全文
  • 同步是:每次自己主动的去问要结果 异步是:不用管,等好了会通知我的 集群:是不同的机器做相同的事 分布式是:每个模块都单独的独立处理,...同步阻塞的  普通水壶不在旁边看 ------>同步非阻塞的  ...

    同步是:每次自己主动的去问要结果

    异步是:不用管,等好了会通知我的

    集群:是不同的机器做相同的事

    分布式是:每个模块都单独的独立处理,相互之间协调才能完成一件事

    阻塞:是不能干别的事,只能在这等他的结果

    非阻塞:是可以干别的事,有结果会通知的

    ex:

         普通水壶 等在旁边 ------>同步阻塞的

         普通水壶不在旁边看 ------>同步非阻塞的

         响水壶 在旁边看着------> 异步阻塞的

         响水壶 不在旁边看着  ------> 异步非阻塞的

    展开全文
  • 同步阻塞) 老张觉得自己有点傻 2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞) 老张还是觉得自己有点傻,于是变高端了,买了把会响笛那种水壶。水开之后,能大声发出嘀~~~~...
  • 同步阻塞)老张觉得自己有点傻2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有。(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛那种水壶。水开之后,能大声发出嘀~~~~噪音...
  • 我喜欢一个女孩,于是每天就盯着屏幕守候在手机旁边等待她来信---同步阻塞 时间长了眼睛疼,于是就开启了来信提醒,听到声音时唤醒我迷醉心---异步阻塞 老醉生梦死也不是事儿,于是就一边关注着屏幕,一边做着...
  • 阻塞vs非阻塞 两者的区别在于等待调用结果时的状态不同。 阻塞:在调用结果返回前...同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication) 所谓同步,就是在发出一个*调用
  • 同步异步以及阻塞和阻塞的区别 https://blog.csdn.net/wanghang88/article/details/51848478 一、同步异步的区别: 同步:一个服务的完成需要依赖其他服务时,只有等待被依赖的服务完成后,才算完成,这是一...
  • 但是一般而言,我们在说同步异步的时候,特指那些需要其他部件协作或者需要一定时间完成任务。最常见例子就是 SendMessage。该函数发送一个消息给某个窗口,在对方处理完消息之前,这个函数不返回。当对方处理...
  • 主要介绍了JAVA同步异步阻塞和非阻塞之间的区别,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
  • 做网络IO编程我们或多或少都会接触到同步、异步、阻塞、非阻塞等相关技术术语,但是到底什么是同步异步阻塞非阻塞,他们怎么定义,有什么区别,很多童鞋可能一直处于一种半懂半懵逼状态。 针对同步,异步,阻塞...
  • 异步or 同步 关注是 发出调用后,当前这个调用是否直接返回,不管是否有返回结果<调用结果> 阻塞还是非阻塞关注是:程序等待调用结果<返回值>状态,在无法得到返回值情况下,调用是否会阻塞...
  • Java之阻塞和非阻塞以及同步异步的区别

    万次阅读 多人点赞 2018-05-16 10:47:22
    转载:https://www.cnblogs.com/George1994/p/6702084.html阻塞和非阻塞,同步异步1 例子故事:老王烧开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响水壶,简称响水壶)。老王想了想,有好几种等待...
  • 同步 异步 阻塞 非阻塞的区别

    千次阅读 2009-10-10 23:02:00
    同步 异步 阻塞 非阻塞的区别 同步:函数没有执行完不返回,线程被挂起阻塞:没有收完数据函数不返回,线程也被挂起异步:函数立即返回,通过事件或是信号通知调用者?非阻塞:函数立即返回,通过select通知调用者?...
  • 同步和异步 定义:描述是程序提交方式(消息通信机制) 区别同步:任务提交之后,原地等待任务返回结果,等待过程中不做任何事,也就是等待结果之后才能继续往后执行 异步:任务提交之后,不再等待任务...
  • 主要介绍了java 中同步异步阻塞和非阻塞区别详解相关资料,需要朋友可以参考下
  • 同步/异步 阻塞/非阻塞 的区别

    千次阅读 2017-02-21 17:38:03
    同步 异步 阻塞阻塞
  • tcp socket同步 异步 阻塞 非阻塞 的解释.zip 基本概念:同步异步阻塞和阻塞的区别 同步异步与阻塞非阻塞的区别 C++ 同步异步与阻塞非阻塞的区别
  • 同步和异步关注是消息通信机制 (synchronous communication/ asynchronous communication) 所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回。但是一旦调用返回,就得到返回值了。 ...
  • 同步异步阻塞和非阻塞,这两组概念出现在IO操作中常常让人混淆不清。这里根据自己看到,想到,整理下自己理解,权当交流。 IO操作其实可以分成两个步骤,请求IO操作和执行IO操作。一般IO调用过程是这样...
  • 主要介绍了科学知识:同步异步阻塞和非阻塞区别,本文分别讲解了这些概念,需要朋友可以参考下
  • 理解同步/异步和阻塞/非阻塞的区别

    千次阅读 多人点赞 2017-03-30 09:37:04
    同步/异步和阻塞/非阻塞的区别...
  •  同步(Synchronous)和异步(Asynchronous)概念本来来自通信领域:首先是通信的同步,主要是指客户端在发送请求后,必须得在服务端有回应后才发送下一个请求,所以这个时候所有请求将会在服务端得到同步;...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,241
精华内容 896
关键字:

异步阻塞和同步阻塞的区别