同步异步、阻塞非阻塞

同步和异步

同步和异步是两种不同的消息通信机制,我们以客户端(调用者)和服务端(被调用者)之间的通信为例:

  • 同步: 就是指客户端调用服务端的某个东西时,在没有得到调用结果之前,该调用就不会返回。也就是说客户端必须等到这个调用返回结果才能继续往后执行;
  • 异步: 和同步相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果。换句话说,当客户端发送出了一个异步调用后,它不会立刻得到结果,而是在未来的某个时间,服务端通过状态、通知来通知客户端你的这个异步调用成功了,或者也可以通过回调函数来处理这个异步调用的返回结果。

举个通俗的例子,打电话:

  • 你打电话问书店老板有没有某本书,如果是同步通信机制,书店老板会说,“您稍等,我查一下”,然后开始查啊查,等查好了(可能是 5 秒,也可能是一天)告诉你结果(返回结果);

  • 而异步通信机制,书店老板直接告诉你 “我查一下啊,查好了打电话给你”,然后直接挂电话了(不返回结果)。然后查好了,他会主动打电话给你。在这里老板通过 “回电” 这种方式来回调。

阻塞和非阻塞

另外,关于同步和异步,需要区别于阻塞和非阻塞,这几个概念经常容易混淆。
阻塞和非阻塞关注的是客户端在等待调用结果时的状态

  • 阻塞调用,是指调用结果返回之前,客户端的当前线程会被挂起,这个调用线程只有在获取到服务端的调用结果之后才能继续运行;
  • 非阻塞调用,就是说即使客户端的线程无法立即获取到服务端的调用结果,这个线程也不会被阻塞,它可以继续去做其他的事情。

还是上面打电话的例子:

  • 你打电话问书店老板有没有某本书,如果是阻塞式调用,你会一直把自己 “挂起”,直到得到这本书有没有的结果;

  • 如果是非阻塞式调用,你不管老板有没有告诉你,你自己就先去做别的事情了, 当然你也要偶尔过几分钟 check 一下老板这边有没有返回结果。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值