Node.js的Event Loop:六个阶段详解
Node.js的事件循环是一个轮询事件循环,它使得Node.js可以处理大量的并发操作。Node.js的事件循环有六个主要阶段:
- 执行全局代码:Node.js开始执行你的代码,如果这是同步代码,它会直接执行。
- 检查微任务:在执行完全局代码之后,Node.js会执行所有微任务,如Promise的then/catch。
- 执行计时器:Node.js会执行所有到期的计时器回调。
- I/O事件:Node.js会处理所有挂起的I/O事件,例如文件读取、网络通信等。
- 检查微任务:在处理I/O事件之后,Node.js会再次检查并执行微任务。
- 返回到事件循环:如果这个时候还有其他事件,Node.js会再次循环回来处理。
下面是一个简单的例子,演示了这个过程:
// 第一阶段:执行全局代码
console.log('Global Code');
// 第二阶段:检查微任务
Promise.resolve().then(() => {
console.log('Microtask');
});
// 第三阶段:执行计时器
setTimeout(() => {
console.log('Timer');
}, 0);
// 第四阶段:I/O事件
const fs = require('fs');
fs.readFile('file.txt', () => {
console.log('File I/O');
});
// 第五阶段:检查微任务
Promise.resolve().then(() => {
console.log('Another Microtask');
});
// 输出顺序将会是:
// Global Code
// Microtask
// Timer
// File I/O
// Another Microtask
在这个例子中,Node.js首先执行全局代码,然后执行第一个微任务,然后处理计时器,接着处理I/O事件,然后再次检查并执行微任务。这个过程会一直重复,直到没有事件处理或者回调可以执行。
评论已关闭