同步与异步

编程模型。同步是调用方等完成时再返回,异步是调用方立即返回,此时调用过程尚未完成。
异步接口设计例子:
Node.JS中异步函数,传入回调函数的立即返回函数。
协程模型。协程启动立即返回,协程内部调用I/O接口立即返回,I/O完成框架在切回此协程。

进程间的通信是通过 send() 和 receive() 两种基本操作完成的。具体如何实现这两种基础操作,存在着不同的设计。 消息的传递有可能是> 阻塞的或> 非阻塞的 – 也被称为> 同步或> 异步的:

  • 阻塞式发送(blocking send). 发送方进程会被一直阻塞, 直到消息被接受方进程收到。
  • 非阻塞式发送(nonblocking send)。 发送方进程调用 send() 后, 立即就可以其他操作。
  • 阻塞式接收(blocking receive) 接收方调用 receive() 后一直阻塞, 直到消息到达可用。
  • 非阻塞式接受(nonblocking receive) 接收方调用 receive() 函数后, 要么得到一个有效的结果, 要么得到一个空值, 即不会被阻塞。

上述不同类型的发送方式和不同类型的接收方式,可以自由组合。

  • 也就是说, 从进程级通信的维度讨论时, 阻塞和同步(非阻塞和异步)就是一对同义词, 且需要针对发送方接收方作区分对待。

image.png

参考

怎样理解阻塞非阻塞与同步异步的区别?
https://www.zhihu.com/question/19732473/answer/241673170

  • 同步(Synchronous)
  • 异步( Asynchronous)
  • 阻塞( Blocking )
  • 非阻塞( Nonblocking)