JavaScript Eventloop | 事件循环机制详解

发布于 2022-03-11  57 次阅读


Eventloop机制是Javascript实现伪“多线程”的关键所在。这一部分也是面试常常会被问到的问题,做个笔记以备查询。

JavaScript的执行机制

首先明确一点,JavaScript是一个单线程语言。所有的任务在JavaScript中都被划分为以下三类之一:

  • 同步任务
  • 异步宏任务
  • 异步微任务

JavaScript通过频繁地切换这些任务,来实现异步任务。

JavaScript的任务执行机制

从整体的执行机制而言,JavaScript按照以下顺序处理手头的任务:

  • 如果是同步任务,直接在主线程中执行。
  • 如果是异步任务,在Event Table中注册该函数,当异步事件完成后(I/O, timeout等),将一步操作的回调函数移入Event Queue中。
  • 当主线程任务执行完毕后,开始执行Event Queue中的异步回调任务(同一个EventLoop内永远是先微任务后宏任务),直到执行完毕。
  • 如此往复循环,称之为Event Loop。

宏任务?微任务?

如何区分

  • 宏任务
    • setTimeout, setInterval, setImmediate
  • 微任务
    • 原生Promise
    • process.nextTick(node.js)
    • Object.observe
    • MutationObserver

执行机制

Event Queue中的异步事件按照以下流程图执行:

异步任务执行流程