⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

Node.js 事件循环:阶段与顺序

深入理解事件循环的六个阶段以及 timers、poll、check 队列的执行顺序。 · 难度:入门 · +15XP

事件循环概览

Node.js 的事件循环是单线程异步的核心机制。它按阶段(phase)运行,每个阶段维护一个回调队列。理解阶段顺序对编写可预测的异步代码至关重要。

六个阶段

  1. timers:执行 setTimeoutsetInterval 的回调
  2. pending callbacks:执行延迟到下一轮循环的 I/O 回调
  3. idle, prepare:内部使用
  4. poll:获取新的 I/O 事件,执行 I/O 回调
  5. check:执行 setImmediate 回调
  6. close callbacks:执行关闭回调(如 socket.on('close'))

关键示例

const fs = require('fs');

setTimeout(() => console.log('timeout'), 0); setImmediate(() => console.log('immediate'));

fs.readFile(__filename, () => { console.log('I/O callback'); setTimeout(() => console.log('I/O timeout'), 0); setImmediate(() => console.log('I/O immediate')); });

// 输出顺序通常为: // timeout // immediate // I/O callback // I/O immediate // I/O timeout

阶段优先级

阶段回调示例执行时机
timerssetTimeout(fn, 0)最早(如果计时器到期)
pollI/O 回调timers 之后
checksetImmediatepoll 阶段之后

练习提示

修改右侧代码,添加一个 process.nextTick 调用并观察它在哪个阶段之前执行。提示:nextTick 不属于事件循环阶段,它会在每个阶段之间执行。

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 135 篇
0 完成
🔥 0