事件循环概述
Node.js 基于事件驱动,将耗时操作交给底层 libuv 处理,主线程持续轮询。
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, 2任务优先级
- 同步代码(立即执行)
- nextTick(微任务,优先级最高)
- Promise.then(微任务)
- setTimeout/setImmediate(宏任务)
阻塞与并发
const fs = require('fs');
// 阻塞(同步)
const data = fs.readFileSync('/tmp/file', 'utf8');
// 非阻塞(异步)
fs.readFile('/tmp/file', 'utf8', (err, data) => {
if (!err) console.log(data);
});理解事件循环能帮助写出高性能的 Node.js 应用,避免 CPU 密集型任务阻塞主线程。
