阐释同步与异步,阻塞与非阻塞的区别
A.同步与异步
同步和异步关注的是消息通信机制
同步:当一个进程在执行某个请求的时候,该进程要一直等待该请求的结果返回后,才能进行后续的执行。
异步:当一个进程在执行某个请求的时候,该进程不必一直等待调用结果的返回,而是继续执行后续的操作。当被调用方有结果返回时,会callback回调通知该进程进行处理。
B.阻塞与非阻塞
阻塞和非阻塞关注的是程序在等待调用返回结果时的状态.
阻塞:是指调用结果返回之前,当前线程会被挂起。一直处于等待消息通知,不能够执行其他业务,调用线程只有在得到结果之后才会返回。
非阻塞:指在该进程在等待时,不会阻塞当前线程,而会执行其他操作。
[举例说明]:
我要干两件事:烧一壶水和看电视,但是烧水在厨房,看电视在客厅。厨房里有2个水壶,一个是普通的水壶,另一个是水开了会鸣笛的水壶。我可以:
1.用普通的水壶烧,人在厨房里看着,水开了才能去客厅看电视。 ---------> (同步,阻塞)
2.用普通的水壶烧,人去客厅看电视,隔几分钟去厨房看一下。 ------------> (同步,非阻塞)
3.用会鸣笛的水壶,人在走廊里傻等着水壶鸣笛。 ----------------------------> (异步,阻塞)
4.用会鸣笛的水壶,人去看电视,听见水壶叫了再去看。 ---------------------> (异步,非阻塞)
普通水壶,需要值守: 同步
会叫的水壶,有反馈通知,不需要值守: 异步
等着看电视的我: 阻塞(状态)
看着电视的我: 非阻塞(状态)
所以,异步往往配合非阻塞,才是效率最大化。
/