乐趣区

关于后端:同步异步阻塞非阻塞

同步、异步、阻塞、非阻塞

同步、异步

同步:

  • 就是在收回一个 调用 时,在没有失去后果之前,该 调用 就不返回 。然而一旦调用返回,就失去返回值了。换句话说,就是由 调用者被动期待这个 调用 的后果
  • 须要被动获取后果。

异步:

  • 调用 在收回之后,这个调用就间接返回了,所以没有返回后果 。换句话说,当一个异步过程调用收回后,调用者不会立即失去后果。而是在 调用 收回后,被调用者 通过状态、告诉来告诉调用者,或通过回调函数解决这个调用。
  • 被调用这会通过或回调给调用者。

举个艰深的例子:
你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等,”我查一下 ”,而后开始查啊查,等查好了(可能是 5 秒,也可能是一天)通知你后果(返回后果)。
而异步通信机制,书店老板间接通知你我查一下啊,查好了打电话给你,而后间接挂电话了(不返回后果)。而后查好了,他会被动打电话给你。在这里老板通过“回电”这种形式来回调。

阻塞、非阻塞

阻塞和非阻塞关注的是 程序在期待调用后果(音讯,返回值)时的状态.

阻塞 调用:

  • 是指调用 == 后果返回之前,以后线程会被挂起。调用线程只有在失去后果之后才会返回 ==,就是在调用后能不能进行其它操作,须要期待办法执行完结。

非阻塞 调用:

  • 指 == 在不能立即失去后果之前,该调用不会阻塞以后线程 ==,就是在调用后还能进行其它操作,不必期待。

还是下面的例子,
你打电话问书店老板有没有《分布式系统》这本书,你如果是阻塞式调用,你会始终把本人“挂起”,直到失去这本书有没有的后果,

如果是非阻塞式调用,你不论老板有没有通知你,你本人先一边去玩了,当然你也要偶然过几分钟 check 一下老板有没有返回后果。

在这里阻塞与非阻塞与是否同步异步无关。跟老板通过什么形式答复你后果无关。

原文链接:https://www.zhihu.com/questio…

退出移动版