事件循环是使单线程 Node.js 能够执行非阻塞 I/O 的机制。它持续处理回调队列:当您的 JavaScript 在一个线程上运行时,I/O 操作被卸载,并在完成后由循环运行它们的回调。
循环的阶段
每次迭代("tick")都会通过有序的阶段,每个阶段都有自己的回调队列:
text
┌───────────────────────────┐
┌─>│ timers (setTimeout) │ ← expired timer callbacks
│ ├───────────────────────────┤
│ │ pending I/O callbacks │
│ ├───────────────────────────┤
│ │ poll (I/O events) │ ← retrieve new I/O; execute their callbacks
│ ├───────────────────────────┤
│ │ check (setImmediate) │
│ ├───────────────────────────┤
└──│ close callbacks │
└───────────────────────────┘
