Node.js 中的事件循环(Event Loop)
Node.js 的事件循环是单线程的,但它使用异步 I/O 操作来避免线程阻塞,并支持并发。事件循环处理 I/O 请求、定时器和 interval 计时器,并且其中的一些工作是由 libuv 库管理的,该库负责跨平台的异步操作。
Node.js 的事件循环分为6个主要阶段:
- 执行全局代码
- 执行微任务(例如:Promise)
- 执行 close callbacks
- 执行 setImmediate 回调
- 执行 setUncaughtException callbacks
- 执行 close callbacks
以下是一个简单的例子,展示了如何在 Node.js 中使用事件循环的某些特性:
// 示例:Node.js 事件循环
// 执行定时器
setTimeout(() => {
console.log('定时器事件');
}, 0);
// 执行 setImmediate
setImmediate(() => {
console.log('setImmediate事件');
});
// 执行 Promise 微任务
Promise.resolve().then(() => {
console.log('微任务事件');
});
console.log('同步代码事件');
// 当所有同步代码执行完毕后,事件循环开始执行微任务和其他阶段的回调。
// 控制台输出顺序将是:
// 同步代码事件
// 微任务事件
// 定时器事件
// setImmediate事件
在这个例子中,首先执行的是全局同步代码,然后执行微任务,然后是两个定时器回调,最后是 setImmediate
回调。这个过程体现了 Node.js 事件循环的处理机制。
评论已关闭