问题:
同步、异步、堵塞、非堵塞 分别是什么意思,什么区别?
一篇很细的博客讲解四者之间的关系
同步 VS 异步
- 关注的是通信机制
- 同步是主动等待调用的结果, 不去做其他事情
- 异步不等待调用的结果, 而是去做其他事情, 直到收到了被调用方的通知
堵塞 VS 非堵塞
- 关注的是进程等待调用结果时的状态
- 堵塞: 进程会挂起, 直到调用结果返回
- 非堵塞: 调用结果立刻返回, 进程不会挂起, 然后不断测试, 直到出结果
引入老王烧水的例子
- 同步堵塞
- 老王把水壶放火上,立等水烧开(老王被挂起),然后泡茶(后续事务)
- 同步非堵塞
- 老王把水壶放火上,去看电视了(老王没有被挂起),隔几分钟来看一眼水有没有开(轮询),等水开了后泡茶
异步
- 异步就是异步
- 上面区分堵塞、非堵塞时,提到的前提是: 等待结果返回之前。然而,异步的“调用”,调用者 不等待 结果,也就不可能被挂起,也就不可能堵塞!
- 也就是说,异步一定是非堵塞的
- 例子:
- 老王换了个烧开后会响的水壶,把水壶放火上,自己去看电视了,中间不回来看,水开了后水壶呜呜呜响,老王听到声音就回来,然后泡茶