雷姆 Agent·念念工作台
首页文章项目

concept / stage 4

Node.js Event Loop 事件循环

理解 Node.js 如何在主线程中协调异步 I/O,以及为什么阻塞事件循环会拖慢整个服务。

Node.jsIntermediate已完成40 分钟#nodejs#event-loop#async#promise
BEFORE YOU START

学习前置

Node.jsNode.js 运行机制先学习 ↗

一、这个技术是什么?

服务器同时面对很多请求。如果每个请求都等待文件、网络或数据库返回,主线程就会被长时间占用,其他请求也无法及时处理。

事件循环让 Node.js 可以先发起异步任务,暂时处理其他工作,等 I/O 完成后再回来继续执行。

二、没有它之前发生了什么?

一个请求同步等待 I/O
↓
主线程被占用
↓
其他请求排队等待
↓
并发请求导致吞吐量下降
↓
事件循环和异步回调出现

三、核心概念

1. Call Stack

调用栈记录当前正在执行的 JavaScript 函数。栈被长时间占用时,事件循环无法继续处理其他任务。

2. Task Queue

异步任务完成后,回调会进入相应队列,等待事件循环安排执行。

3. Microtask

Promise continuation 和 queueMicrotask 等微任务通常会在合适时机优先于普通宏任务执行。

4. libuv

libuv 协助 Node.js 处理网络、文件和线程池等异步操作。

5. Blocking

复杂计算、大量同步文件操作或无限循环会阻塞事件循环,影响同一进程中的其他请求。

四、运行流程

五、面试复习

一句话回答

Node.js 通过事件循环协调异步任务,让主线程不必同步等待 I/O;但耗时同步计算会阻塞事件循环,拖慢同一进程的所有请求。

高频追问

  • setTimeout、Promise 和 process.nextTick 的执行顺序如何理解?
  • Node.js 单线程为什么可以处理并发?
  • 如何发现事件循环被阻塞?
  • CPU 密集任务应该怎么处理?

容易答错

不要把并发和并行混为一谈。事件循环擅长协调等待中的任务,不代表 JavaScript 主线程可以同时执行多个计算任务。

六、项目展示

在 API 项目中,可以通过避免同步文件操作、拆分 CPU 密集任务、增加超时和监控事件循环延迟来提高服务稳定性。

INTERVIEW MODE

面试复习

把知识讲给面试官听
ANSWER

Node.js 通过事件循环协调异步任务,让主线程不必同步等待 I/O;但耗时同步计算会阻塞事件循环,拖慢同一进程的所有请求。

FOLLOW-UP
  • `setTimeout`、Promise 和 `process.nextTick` 的执行顺序如何理解?
  • Node.js 单线程为什么可以处理并发?
  • 如何发现事件循环被阻塞?
  • CPU 密集任务应该怎么处理?
WATCH OUT

不要把并发和并行混为一谈。事件循环擅长协调等待中的任务,不代表 JavaScript 主线程可以同时执行多个计算任务。

PROJECT PRACTICE

把 Node.js Event Loop 事件循环 放进项目里

用真实项目验证概念,再把架构、取舍和结果整理成面试时可以讲清楚的案例。

Hermes AgentAgent 工作流与工具调用
个人博客技术文章与工程实践展示
AI 知识平台当前 Markdown 驱动的知识系统
KEEP EXPLORING

相关知识

2 个推荐节点
Node.js · BeginnerNode.js 运行机制30 分钟 · 继续学习 ↗Node.js · IntermediateExpress 与 Fastify 接口设计40 分钟 · 继续学习 ↗
← 上一篇Node.js 运行机制下一篇 →Express 与 Fastify 接口设计

课程目录

  1. 1. Call Stack
  2. 2. Task Queue
  3. 3. Microtask
  4. 4. libuv
  5. 5. Blocking
  6. 一句话回答
  7. 高频追问
  8. 容易答错

学习关系

  • 阶段:4
  • 顺序:2
  • 前置知识:1
  • 相关知识:2
  • 更新时间:2026-08-02