转载自https://www.zhihu.com/question/19732473/answer/20851256在实际应用中,只有三种调用方式:同步-阻塞、同步-非-阻塞和异步。同步与异步同步和异步侧重于消息通信机制。同步:发出直到获得结果才返回的调用。调用返回后,您将获得返回值。异步:调用一次,调用直接返回,不返回任何结果。当被调用者得到结果后,会使用其他方法通知调用者,或者通过回调函数处理调用。举个通俗的例子:你打电话问书店老板有没有《分布式系统》这本书。如果是同步通信机制,书店老板会说,等一下,“我查”,然后开始查查,查完了会告诉你结果(返回结果)(可能需要5秒,或者可能需要一天)。至于异步通信机制,书店老板直接跟你说我查,查完我给你打电话,然后直接挂断(不返回结果)。然后查看之后,他会主动给你打电话(回调函数)。阻塞(blocking)与非阻塞(non-blocking)阻塞和非阻塞关注的是程序在等待调用结果时的状态。阻塞调用:当前线程会被挂起,直到调用结果返回。调用线程只有在得到结果后才会返回。非阻塞调用:当不能立即得到结果时,调用不会阻塞当前线程。还是上面的例子:你打电话问书店老板有没有这本书《分布式系统》。如果是阻塞调用,你会等到得到没有这本书的结果。如果是非阻塞调用,你不管老板跟不跟你说,你先去玩。你可能要偶尔问老板几分钟,看看有没有返回结果(asynchronous-polling),或者让老板打电话告诉你结果(asynchronous-callback)。
