写这篇文章主要是因为自己对同步与阻塞的关系有点弄不清,通过查阅各方文章,重新梳理了一下这块的知识点。
一、同步与异步
同步与异步其实是基于消息通信机制而产生的两种消息响应模式。关注的是消息通信的响应。
- 同步:指的是发出一个调用后,在没有得到结果的情况下,调用不得返回;只有在得到结果后,调用才能返回,换句话说调用返回一定是有了结果。
这个时候的主体是调用方在主动等待调用结果。 - 异步:指的是发出一个调用后,就立即返回去做其他事了。当调用结果产生后,被调用者通过通知、状态再去通知调用者或者是通过回调函数处理这个调用。
这个时候的主体是被调用方,调用方只是被动的去接收调用结果。
举个例子:
情景:服装店店长打电话去仓库查一件外套的库存情况。
店长打电话给仓库管理员,报出某产品的型号,该管理员开始在系统里检索查找,这个过程可能持续几秒钟或几分钟。在这个过程里,电话是不挂断的,当管理员查到结果告诉店长后,这时候电话挂断。
这里打电话查结果的过程其实就是一个现实的同步调用过程。
还是同样的情景。
店长打电话给管理员查库存,报出一个产品的型号后,店长说查到结果后再回电话通知他,然后就挂断了电话。过了一段时间后,仓库管理员找到了库存记录结果