同步和异步

同步和异步的区别
同步、异步、阻塞、非阻塞,是分3个层次的:

CPU层次;

线程层次;

程序员感知层次。

这几个概念之所以容易混淆,是因为没有分清楚是在哪个层次进行讨论。

CPU层次

  1. CPU层次,或者说操作系统进行IO和任务调度的层次,
  2. 现代操作系统通常使用异步非阻塞方式进行IO
  3. 即发出IO请求之后,并不等待IO操作完成,而是继续执行下面的指令(非阻塞),IO操作和CPU指令互不干扰(异步),
  4. 最后通过中断的方式来通知IO操作完成结果。

 

线程层次

  1. 多线程(同步阻塞);
  2. 同步线程:即两个线程步调要一致,要相互协商阻塞是为了等待
  3. IO多路复用(selectpollepoll)(同步非阻塞,严格地来讲,是把阻塞点改变了位置);
  4. 直接暴露出异步的IO接口,如kernel-aioIOCP(异步非阻塞)。
  5. 异步线程:步调不用一致,各自按各自的步调运行,不受另一个线程的影响。

程序员感知层次

  1. pythonasyncio库中,就通过协程,提供了同步阻塞式的API
  2. node.js中,就通过回调函数,提供了异步非阻塞式的API

 

普通感知层次

普通B/S模式(同步)AJAX技术(异步)

  1. 同步调用就是调用一但返回,就能知道结果,
  2. 而异步是返回时不一定知道结果,还得通过其他机制来获知结果,如:状态,通知,回调

通信层次

  1. 同步通信是指:发送方和接收方通过一定机制,实现收发步调协调
  2. 异步通信是指:发送方的发送不管接收方的接收状态,接收方主动通知
  3. 同步+非阻塞发送方和接收方通过一定机制发送主动check

 

 

作者:银月游侠
链接:https://www.zhihu.com/question/19732473/answer/88599695
来源:知乎

 

posted @ 2017-07-26 14:53  alan-alan  阅读(269)  评论(0编辑  收藏  举报