VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • python基础教程之同步、异步与阻塞、非阻塞

1. 同步与异步

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

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

 

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

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

 

  举个例子:

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

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

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

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

  

  总结:

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

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

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

1. 阻塞与非阻塞

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

  

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

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

 

  还是上面的例子:

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

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

  

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

  总结:

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

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

 

  参考网址:

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


相关教程