研习录 - 计算机科学

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

在计算机编程中,同步、异步、阻塞和非阻塞是描述程序或进程之间交互方式的概念,它们的区别如下:

  1. 同步(Synchronous):同步指的是程序按照顺序依次执行,并且需要等待某个操作完成后才能继续执行下一步。调用者会主动等待被调用的操作完成,并获取结果后再进行下一步操作。
  2. 异步(Asynchronous):异步指的是程序的执行不会被阻塞,可以继续执行其他任务而无需等待某个操作完成。调用者发起一个操作后,不需要立即等待其完成,而是通过回调函数、事件通知等方式来处理操作完成后的结果。
  3. 阻塞(Blocking):阻塞指的是在执行某个操作时,调用者会被挂起并等待操作完成,无法进行其他任务。在阻塞模式下,调用者必须等待操作完成后才能继续执行。
  4. 非阻塞(Non-blocking):非阻塞指的是在执行某个操作时,调用者无论操作是否完成都不会被挂起,可以继续执行其他任务。在非阻塞模式下,调用者可以立即返回并继续执行其他操作,不需要等待操作的完成。

总结:

  • 同步和异步关注的是程序执行的顺序和等待机制

    • 同步与异步着重点在消息通知的方式,也就是调用结果通知的方式
      • 轮询 / 回调
  • 阻塞和非阻塞关注的是程序在等待某个操作完成时是否会被挂起

    • 阻塞与非阻塞的着重点在于当前线程等待消息返回的行为

需要注意的是,同步和异步、阻塞和非阻塞并不是互斥的概念。一个操作可以是同步阻塞的,也可以是异步非阻塞的,具体取决于程序设计和所使用的接口或协议的特性。

参考一