Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

同步异步、阻塞非阻塞

同步和异步

  • 同步:

    • 请求方发起一个请求
    • 如果
      • 一直卡住并询问结果,不往下执行了,那就是同步阻塞
      • 先立即返回,往下执行,但需要每隔一小段时间过来问结果,那就是同步非阻塞
  • 异步

    • 请求方发起一个请求
    • 如果
      • 一直卡住等对方通知结果,那就是异步阻塞
        • 本质和同步阻塞差不多,但区别是自己不用一直问了,可以停下手中的活,等对方通知
      • 先立即返回,然后往下执行,等对方通知结果,那就是异步非阻塞
  • 这么看来同步阻塞简直是效率极低,但其实不是的

    • 因为操作系统可以分出几千个线程,然后让同步阻塞的线程进入休眠,等过会再让它醒来,然后它以为自己一直在询问中,这时候经过一段时间,一般都能成功拿到结果
  • 异步非阻塞也不是效率最高的

    • 因为需要管理很多个挂起的请求,用统一的内部循环来检查是否有请求可以进行通知
    • 由于js是单线程的语言,所以天生擅长异步非阻塞

阻塞和非阻塞

从上面例子看出,需要等待的情况下,立即返回就是非阻塞,不返回就是阻塞。

阻塞不一定不好,因为有更高层次的力量(操作系统)在优化全局资源