EventLoop

之所以称之为 事件循环,是因为它经常按照类似如下的方式来被实现:

while (queue.waitForMessage()) {
  queue.processNextMessage();
}

queue.waitForMessage() 会同步地等待消息到达(如果当前没有任何消息等待被处理)。

一个 EventLoop 中,可以有一个或多个任务队列。一个任务队列便是一系列有序任务(task)的集合;每个任务都有一个任务源(task source),源自同一个任务源的 task 必须放到同一个任务队列,从不同源来的则被添加到不同队列。

setTimeout/Promise 等API便是任务源,而进入任务队列的是他们指定的具体执行任务。

文章链接

任务队列

  • 宏任务 (macro)task

    (macro)task主要包含:script(整体代码)、setTimeoutsetInterval、I/O、UI交互事件、postMessageMessageChannelsetImmediate(Node.js 环境)

  • 微任务 microtask

    microtask主要包含:Promise.thenMutaionObserverprocess.nextTick(Node.js 环境)

Copyright © imooc-lego (2020 - present) all right reserved,powered by GitbookFile Modify: 2021-06-27 08:04:56

results matching ""

    No results matching ""