怎样理解阻塞非阻塞与同步异步的区别?

“阻塞”与"非阻塞"与"同步"与“异步"不能简单的从字面理解,提供一个从分布式系统角度的回答。
1.同步与异步
同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)
所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回。但是一旦调用返回,就得到返回值了。
换句话说,就是由*调用者*主动等待这个*调用*的结果。

而异步则是相反,*调用*在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果。而是在*调用*发出后,*被调用者*通过状态、通知来通知调用者,或通过回调函数处理这个调用。

典型的异步编程模型比如Node.js

举个通俗的例子:
你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下",然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)。
而异步通信机制,书店老板直接告诉你我查一下啊,查好了打电话给你,然后直接挂电话了(不返回结果)。然后查好了,他会主动打电话给你。在这里老板通过“回电”这种方式来回调。

2. 阻塞与非阻塞
阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.

阻塞调用是指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

还是上面的例子,
你打电话问书店老板有没有《分布式系统》这本书,你如果是阻塞式调用,你会一直把自己“挂起”,直到得到这本书有没有的结果,如果是非阻塞式调用,你不管老板有没有告诉你,你自己先一边去玩了, 当然你也要偶尔过几分钟check一下老板有没有返回结果。
在这里阻塞与非阻塞与是否同步异步无关。跟老板通过什么方式回答你结果无关。

如果是关心blocking IO/ asynchronous IO, 参考 Unix Network Programming View Book

时间: 2024-08-22 01:05:51

怎样理解阻塞非阻塞与同步异步的区别?的相关文章

理解同步异步与阻塞非阻塞

本篇文章我准本从三个大方面来解释下同步异步.阻塞非阻塞的知识,第一个方面主要是说下,到底什么是同步异步.阻塞非阻塞:第二个方面主要是解释下在I/O场景下,同步异步阻塞非阻塞又是怎么定义的,第三个方面介绍下在unix下同步异步又有哪些阻塞非阻塞IO. 1.同步异步与阻塞非阻塞 首先从大的方面来说,"阻塞"与"非阻塞"与"同步"与"异步"不能简单的从字面理解,提供一个从分布式系统角度的回答. 1).同步与异步 同步和异步关注的是消

深入理解同步/异步与阻塞/非阻塞区别 (转)

转载自:http://chuansong.me/n/2124760 几年前曾写过一篇描写同步/异步以及阻塞/非阻塞的文章,最近再回头看,还存在一些理解和认知误区,于是重新整理一下相关的概念,希望对网络编程的同行能有所启发. 同步与异步 首先来解释同步和异步的概念,这两个概念与消息的通知机制有关. 举个例子,比如一个用户去银行办理业务,他可以自己去排队办理,也可以叫人代办,办完之后再告知用户结果.对于要办理这个银行业务的人而言,自己去办理是同步方式,而别人代办完毕再告知则是异步方式. 两者的区别在

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

著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:卢毅链接:http://www.zhihu.com/question/19732473/answer/20851256来源:知乎 "阻塞"与"非阻塞"与"同步"与"异步"不能简单的从字面理解,提供一个从分布式系统角度的回答.1.同步与异步同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous co

关于[同步异步]和[阻塞非阻塞]的个人理解

同步 异步 阻塞 非阻塞 如上两个概念比较容易混淆, 而且实际情况来看二者有时效果相似, 最主要的相似点就是不需要等别人, 下面简单总结下自己的认识 同步和异步 同步和异步是指发起一个服务调用时,是否需要等待调用对象的执行结果.  服务调用分为 [发送命令,调用执行,读取结果 ] 如果需要等待调用对象执行完毕后把结果返回给调用者, 这样就是同步的模式 如果A调用一个服务B, A不需要等B的结果返回就直接返回做其他事情, A只需要发送命令,  等B调用执行完毕后通知A进行 读取结果, 这样是异步的

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

老张爱喝茶,废话不说,煮开水.出场人物:老张,水壶两把(普通水壶,简称水壶:会响的水壶,简称响水壶).1 老张把水壶放到火上,立等水开.(同步阻塞)老张觉得自己有点傻2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有.(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶.水开之后,能大声发出嘀~~~~的噪音.3 老张把响水壶放到火上,立等水开.(异步阻塞)老张觉得这样傻等意义不大4 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶.(异步

超鸡容易理解的---同步异步,阻塞非阻塞

快来看超鸡容易理解的同步异步,阻塞非阻塞,再也不担心理解晦涩的语言了. 阻塞和非阻塞指的是执行一个操作是等操作结束再返回,还是马上返回. 比如餐馆的服务员为用户点菜,当有用户点完菜后,服务员将菜单给后台厨师,此时有两种方式: 第一种:就在出菜窗口等待,直到厨师炒完菜后将菜送到窗口,然后服务员再将菜送到用户手中: 第二种:等一会再到窗口来问厨师,某个菜好了没?如果没有先处理其他事情,等会再去问一次: 第一种就是阻塞方式,第二种则是非阻塞的. 同步和异步又是另外一个概念,它是事件本身的一个属性.还拿

异步/同步、阻塞/非阻塞的理解

[同步和异步] 通俗的讲:同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式. 异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式.同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事异步: 请求通过事件触发->服务器处理(这是浏览器仍然可以作其他事情)->处理完毕 概念从现实中来:同步:打电话,你拨通电话后必须等在那里,直到对方有人接了,你们才能通信或者说你才能继续打下一个电话.异步:发短信,你可以发

单线程,同步异步,阻塞非阻塞的理解

一.概念理解 1.同步异步: 同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回.但是一旦调用返回,就得到返回值了.换句话说,就是由*调用者*主动等待这个*调用*的结果. 而异步则是相反,*调用*在发出之后,这个调用就直接返回了,所以没有返回结果.换句话说,当一个异步过程调用发出后,调用者不会立刻得到结果.而是在*调用*发出后,*被

转:关于阻塞非阻塞、同步与异步的了解

老张爱喝茶,废话不说,煮开水.出场人物:老张,水壶两把(普通水壶,简称水壶:会响的水壶,简称响水壶).1 老张把水壶放到火上,立等水开.(同步阻塞)老张觉得自己有点傻2 老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有.(同步非阻塞)老张还是觉得自己有点傻,于是变高端了,买了把会响笛的那种水壶.水开之后,能大声发出嘀~~~~的噪音.3 老张把响水壶放到火上,立等水开.(异步阻塞)老张觉得这样傻等意义不大4 老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶.(异步

[转]理解阻塞非阻塞与同步异步

from:http://www.zhihu.com/question/19732473 1.同步与异步同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)所谓同步,就是在发出一个*调用*时,在没有得到结果之前,该*调用*就不返回.但是一旦调用返回,就得到返回值了.换句话说,就是由*调用者*主动等待这个*调用*的结果. 而异步则是相反,*调用*在发出之后,这个调用就直接返回了,所以没有返回结果.换句话说,当一