同步和异步主要关注的是同步与异步通信机制。
同步通信机制是指发出一个调用请求时,在没有得到结果之前,该调用请求不会返回,只有得到结果,调用请求才会和结果一起返回,调用者主动等待这个调用的结果。
而异步通信机制则是相反,在调用请求发出之后,这个调用请求就直接返回了,不等待返回结果。也就是说,当一个异步调用请求发出后,调用者不会立刻得到结果。而是在调用请求发出后,立即返回,被调用者得到结果后通过状态或通知来通知调用者,或通过回调函数响应这个调用请求。
你给运行商打电话查询业务,如果是同步通信机制,话务员说,“请您稍等,我查一下”,然后开始查,查好了立马告诉你结果(返回结果)。 而异步通信机制,话务员会说,“先生您挂断电话就好,查好了我打电话给您”,然后直接挂电话了(不返回结果),然后查好了,他会主动打电话给你。在这里话务员通过“回电”这种方式来回调。
阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态。
阻塞调用是指调用结果返回之前,当前线程会被挂起,调用线程只有在得到结果之后才会继续运行。 非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程,线程正常运行。
你给运行商打电话查询业务,如果是阻塞式调用,你会一直把自己“挂起”,不干其他事,就在着干等着,直到得到查询结果; 如果是非阻塞式调用,你不管话务员有没有告诉你查询结果,你自己先一边去玩了, 当然你也要偶尔隔一段时间check一下话务员有没有返回结果。 在这里阻塞与非阻塞与是否同步异步无关。 跟话务员通过什么方式给你回复查询结果无关。
