有如下场景:
1.调用方在调用一个方法后,在没有得到结果时,就不会返回,一直等待,而不去做其他的事,直到被调用方返回消息。(同步阻塞)
2.调用方在调用一个方法后,在没有得到结果时,就不会返回;然后先去做其他事情,但需要隔一段时间看看之前的调用有没有返回消息(同步非阻塞)
3.调用方在调用一个方法后,不需要等待被调用方消息,立刻返回,去做其他的事情,等被调用方通过"通知或回调"通知后,再来获取消息。(异步非阻塞)
4.调用方在调用一个方法后,不需要等待被调用方消息,立刻返回,但不去做其他事,就等着被调用方通过"通知或回调"通知。(异步阻塞)
基于以上4种场景:梳理以下区别
同步与异步
- 同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)
- 被调用方是否可以通过"通知或回调"来通知调用方获取返回消息:可以就是异步,不可以就是同步
阻塞与非阻塞
- 阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态。就是在调用方法后,在没有返回消息的情况下,有没有去做其他事
- 不去做其他事,一直等待,就是阻塞
- 调用后,没有等待去做其他事,但是会监听调用是否返回消息,是非阻塞