2024-03-29|
Node.jsEvent Loop异步编程
Node.js Event Loop
梳理 Node.js Event Loop 的阶段划分,以及 process.nextTick 与微任务执行时机。
Node.js Event Loop
Event Loop 阶段
原笔记将 Node.js Event Loop 分为六个阶段:
- Timers:执行
setTimeout和setInterval回调。 - I/O callbacks:处理上一轮循环中少量未执行的 I/O 回调。
- Idle、prepare:仅供 Node.js 内部使用。
- Poll:轮询并处理文件、网络等 I/O 事件;如果定时器即将到期或存在
setImmediate任务,会离开该阶段。 - Check:执行
setImmediate回调。 - Close callbacks:执行 socket 等对象的
close事件回调。
Event Loop 就是持续循环处理这些阶段和任务。
process.nextTick 与微任务
原笔记记录:Node.js 11 之前,process.nextTick 回调在每个阶段末尾集中执行;Node.js 11 之后,会在阶段内的任务间隙执行,以接近浏览器的行为。
浏览器中的任务包括脚本和 setTimeout,微任务包括 Promise.then、queueMicrotask 和 MutationObserver。原笔记也把 Proxy 列入了微任务,但没有给出说明,因此本整理不沿用这一条。
关于 Promise.resolve().then(fn) 的执行,原笔记只说明需要结合 Promise 的具体实现和 process.nextTick 理解,没有继续展开结论。