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

同步与异步的区别:
  同步与异步关注的是消息通信机制,所谓同步,就是“调用者”主动等待这个“调用”的结果
  而异步则相反:“调用”在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当一个异步过程调用发出后,调用者不会立即得到结果。而是在“发出后”,“被调用者”通过状态,来通知调用者,或通过回调函数处理这个调用。

同步阻塞的例子:
你上QQ问书店老板有没有《分布式系统》这本书,如果是同步阻塞,书店老板会说,你稍等,“我查一下”,然后开始查啊查,等查好了(可能是5秒,也可能是一天)告诉你结果(返回结果)。(你一直等的,等老板给你回复)
同步非阻塞的例子:
而如果是同步非阻塞,不管老板有没有告诉你,你自己一边玩去了,当然你也会偶尔过几分钟问一下老板,书找到了吗。
异步机制的例子:
书店老板会直接告诉你我查一下啊,查好了,我直接回复你,然后直接那人就下线(不返回结果)。然后查好了,他会主动联系你。


同步:多个任务之间有先后顺讯,执行一个操作之后,等待结果,然后才能继续执行后续的操作

异步:多个任务之间没有先后顺序,可以同时执行,有时候一个任务可能要在必要的时候获取另一个同时执行的任务的结果,这个就是回调。

阻塞:如果卡住调用者,调用者不能继续往下执行,就是调用者阻塞。(进程给CPU传达一个任务后,一直等待CPU处理完成,然后才执行后面的操作)

非阻塞:如果不会卡住,可以继续执行,就是说非阻塞(进程给CPU传达任务后,继续处理后续的操作,隔断时间再来询问之前的操作是否完成,这样的过程其实也叫轮询

同步异步是相对多任务而言;阻塞非阻塞是相对于代码执行而言

原文地址:https://www.cnblogs.com/hemingwei/p/11583332.html