Node.js 事件循环与异步非阻塞 IO
Node.js 基于事件循环实现高并发,理解其机制可避免性能陷阱。
1. 事件循环阶段
- 定时器(setTimeout/setInterval)
- I/O 回调
- idle, prepare
- poll(获取新 I/O 事件)
- check(setImmediate)
- close callbacks
2. 微任务与宏任务
console.log('1');
setTimeout(() => console.log('2'), 0);
process.nextTick(() => console.log('3'));
Promise.resolve().then(() => console.log('4'));
console.log('5');
// 输出:1,5,3,4,23. 阻塞 CPU 密集型任务
- 使用
worker_threads或子进程。 - 避免在主线程中同步计算。
4. 异步 IO 示例
const fs = require('fs');
fs.readFile('file.txt', 'utf8', (err, data) => {
if (!err) console.log(data);
});理解事件循环可写出更高效的 Node.js 应用。
