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

发布时间:2019-06-07 20:35:07编辑:auto阅读(1844)

    1. 同步与异步

      同步和异步关注的是消息通信机制。同步就是在发出一个【调用】时,在没有拿到结果之前,该【调用】就不返回,但是一旦调用返回,就得到返回值了。

      换句话说,就是由【调用者】主动等待这个【调用】的结果。

     

      而异步正好相反,【调用】在发出之后,这个调用就直接返回了,所以没有返回结果。也就是说,当一个异步过程调用发出后,调用者不会立刻得到结果

      而是在【调用】发出后,【被调用者】通过状态、通知来通知调用者,或通过回调函数处理这个调用。

     

      举个例子:

      你打电话问书店老板有没有《分布式系统》这本书,如果是同步通信机制,书店老板会说,你稍等一下,我查一下,然后开始查啊查,等查好了(可能是

      5秒,也可能是一天)告诉你结果(返回结果)。

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

      老板通过<回电>这种方式来回调。

      

      总结:

      同步和异步针对应用程序来说,关注的是程序中间的协作关系。

      同步:执行一个操作之后,等待结果,然后才继续执行后续的操作。

      异步:执行一个操作之后,可以去执行其他操作,然后等待通知再回来执行刚才没执行完的操作。

    1. 阻塞与非阻塞

      阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态。

      

      阻塞调用是指调用结果返回之前,当前线程会被挂起,调用线程只有在得到结果之后才会返回。

      非阻塞调用指在不能立刻得到结果之前,该调用不会阻塞当前线程。

     

      还是上面的例子:

      你打电话问书店老板有没有《分布式系统》这本书,你如果是阻塞调用,你会一直把自己挂起,直到得到这本书有没有的结果,如果是非阻塞调用

      你不管老板有没有告诉你,你自己先一边去玩了,当然你也要偶尔过几分钟check一下老板有没有返回结果。

      

      阻塞与非阻塞与是否同步异步无关。

      总结:

      阻塞:进程给CPU传达一个任务之后,一直在等待CPU处理完成,然后才执行后边的操作。

      非阻塞:进程给CPU传达一个任务之后,继续处理后续的操作,隔段时间再来询问之前的操作是否完成,这样的机制也叫轮询。

     

      参考网址:

      https://www.zhihu.com/question/19732473

关键字

上一篇: 高阶函数

下一篇: python字符串处理方法