Node.js 服务变慢时,如何确认事件循环被同步代码阻塞?
结合事件循环延迟、CPU 栈和请求阶段耗时定位 Node.js 卡顿,给出 monitorEventLoopDelay 的纳秒转毫秒示例,说明统计窗口、采样局限和下游等待不能混为同一根因。
Node.js · 运行时与调度面试题第 1 页,显示第 1–41 题,共找到 41 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
结合事件循环延迟、CPU 栈和请求阶段耗时定位 Node.js 卡顿,给出 monitorEventLoopDelay 的纳秒转毫秒示例,说明统计窗口、采样局限和下游等待不能混为同一根因。
说明事件循环 close callbacks 只涉及部分资源关闭回调,区分 socket 生命周期、普通 EventEmitter 同名事件和自定义流实现,避免从事件名字推导固定阶段或业务成功。
Node.js 的 CPU 密集任务应该切片、用 Worker,还是交给独立进程? 本文先给出可直接复述的结论,再用最小代码说明Node.js CPU 密集任务 拆分 setImmediate worker_threads的工作方式、判断依据、项目边界和常见误区。
以 fs.readFile 回调为具体上下文比较 setImmediate 与零延时定时器,说明 poll 到 check 的关系、定时器阈值,以及同步注册、await 续体和自定义事件的区别。
JSON.parse 一个超大请求体为什么也会阻塞 Node.js 事件循环,有哪些缓解方式? 本文先给出可直接复述的结论,再用最小代码说明JSON.parse 阻塞事件循环 大请求体的工作方式、判断依据、项目边界和常见误区。
如何用 perf_hooks 的 monitorEventLoopDelay 量化 Node.js 事件循环延迟? 本文先给出可直接复述的结论,再用最小代码说明monitorEventLoopDelay 事件循环延迟 直方图的工作方式、判断依据、项目边界和常见误区。
通过分段求和示例展示如何保存游标与累计结果、在片段间安排 setImmediate,说明首片仍同步执行、总复杂度不变,以及片段预算、取消和不可拆分计算的限制。
Node.js 事件循环有哪些阶段,Node 20 之后定时器位置有什么变化? 本文先给出可直接复述的结论,再用最小代码说明Node.js 事件循环阶段 timers poll check的工作方式、判断依据、项目边界和常见误区。
Node.js 的 poll 阶段何时等待 I/O,何时继续进入后续阶段? 本文先给出可直接复述的结论,再用最小代码说明Node.js poll 阶段 阻塞 计算超时的工作方式、判断依据、项目边界和常见误区。
Node.js 进程什么时候自然退出?哪些未决的句柄或定时器会阻止退出? 本文先给出可直接复述的结论,再用最小代码说明Node.js 进程退出 活跃句柄 ref unref的工作方式、判断依据、项目边界和常见误区。
Node.js 中什么时候用 setImmediate,什么时候用 setTimeout? 本文先给出可直接复述的结论,再用最小代码说明setImmediate 设计意图 适用场景的工作方式、判断依据、项目边界和常见误区。
Node.js 的 setTimeout 为什么无法保证精确的毫秒级触发,最小延迟和影响因素有哪些? 本文先给出可直接复述的结论,再用最小代码说明setTimeout 最小延迟 精度 Node.js 1ms的工作方式、判断依据、项目边界和常见误区。
解释顶层注册时计时阈值和启动过程如何影响观察,给出独立 CommonJS 脚本用于记录顺序,说明重复结果不是保证,并区分 I/O 回调、ESM 与真实业务依赖。
Node.js 中给定时器调用 unref() 后进程行为有什么变化,典型用途是什么? 本文先给出可直接复述的结论,再用最小代码说明timer unref Node.js 不阻止进程退出的工作方式、判断依据、项目边界和常见误区。
async_hooks 的 init、before、after、destroy 四个回调分别在异步资源生命周期的什么时候触发? 本文先给出可直接复述的结论,再用最小代码说明async_hooks init before after destroy 时机的工作方式、判断依据、项目边界和常见误区。
Node.js 的 async_hooks 模块能追踪什么,为什么它被标记为实验性但仍被广泛使用? 本文先给出可直接复述的结论,再用最小代码说明async_hooks 用途 实验性 asyncId的工作方式、判断依据、项目边界和常见误区。
AsyncLocalStorage 如何在 Node.js 中实现跨异步调用的请求级上下文(如 traceId)传递? 本文先给出可直接复述的结论,再用最小代码说明AsyncLocalStorage 请求上下文 traceId 传递的工作方式、判断依据、项目边界和常见误区。
哪些写法会导致 AsyncLocalStorage 的上下文在 Node.js 中丢失,比如事件监听或连接池复用? 本文先给出可直接复述的结论,再用最小代码说明AsyncLocalStorage 上下文丢失 EventEmitter 连接池的工作方式、判断依据、项目边界和常见误区。
在 Node.js 里做请求上下文传递,为什么优先 AsyncLocalStorage 而不是第三方 cls 或 zone 方案? 本文先给出可直接复述的结论,再用最小代码说明AsyncLocalStorage 对比 cls 请求上下文方案的工作方式、判断依据、项目边界和常见误区。
Node.js 的 AsyncResource 类解决什么问题,自定义异步资源(如手写队列)为什么要显式使用它? 本文先给出可直接复述的结论,再用最小代码说明AsyncResource 自定义异步资源 AsyncLocalStorage的工作方式、判断依据、项目边界和常见误区。
Node.js 中 executionAsyncId 和 triggerAsyncId 分别代表什么,如何用它们还原异步调用因果链? 本文先给出可直接复述的结论,再用最小代码说明executionAsyncId triggerAsyncId 区别的工作方式、判断依据、项目边界和常见误区。
Node.js EventEmitter 的 captureRejections 选项解决了异步监听器里的什么问题? 本文先给出可直接复述的结论,再用最小代码说明EventEmitter captureRejections 异步监听器 rejection的工作方式、判断依据、项目边界和常见误区。
设计一个 Node.js 内部模块时,什么时候应该继承 EventEmitter 而不是直接回调或返回 Promise? 本文先给出可直接复述的结论,再用最小代码说明继承 EventEmitter 设计决策 回调 Promise 对比的工作方式、判断依据、项目边界和常见误区。
为什么 Node.js 约定 EventEmitter 的 'error' 事件没有监听器时会直接抛出异常? 本文先给出可直接复述的结论,再用最小代码说明EventEmitter error 事件 未监听 抛出的工作方式、判断依据、项目边界和常见误区。
Node.js 的 events.on() 把 EventEmitter 转成异步迭代器,适用于什么场景,背压如何处理? 本文先给出可直接复述的结论,再用最小代码说明events.on 异步迭代器 EventEmitter Node.js的工作方式、判断依据、项目边界和常见误区。
Node.js EventEmitter 监听器里的 this 指向什么,箭头函数和普通函数有何差别? 本文先给出可直接复述的结论,再用最小代码说明EventEmitter 监听器 this 箭头函数的工作方式、判断依据、项目边界和常见误区。
Node.js EventEmitter 的 'newListener' 事件能在什么场景派上用场,使用时有什么坑? 本文先给出可直接复述的结论,再用最小代码说明EventEmitter newListener 事件 用途 递归的工作方式、判断依据、项目边界和常见误区。
在 Node.js 循环里反复给同一个 EventEmitter 绑 once 监听器,为什么可能内存泄漏,如何规避? 本文先给出可直接复述的结论,再用最小代码说明EventEmitter once 内存泄漏 监听器累积的工作方式、判断依据、项目边界和常见误区。
Node.js 中对 once 注册的监听器调用 removeListener 时应该传原函数还是包装函数? 本文先给出可直接复述的结论,再用最小代码说明once removeListener 包装函数 EventEmitter的工作方式、判断依据、项目边界和常见误区。
Node.js EventEmitter 的 prependListener 与 on 在什么场景下有意义,比如要保证某监听器最先执行? 本文先给出可直接复述的结论,再用最小代码说明prependListener 监听器顺序 EventEmitter的工作方式、判断依据、项目边界和常见误区。
为什么用匿名箭头函数注册的 EventEmitter 监听器常常 removeListener 失败? 本文先给出可直接复述的结论,再用最小代码说明removeListener 移除失败 函数引用 EventEmitter的工作方式、判断依据、项目边界和常见误区。
Node.js 的 EventEmitter.emit 是同步还是异步派发?这对监听器里的异常有什么后果? 本文先给出可直接复述的结论,再用最小代码说明EventEmitter emit 同步 监听器异常的工作方式、判断依据、项目边界和常见误区。
Node.js 中 async 函数里 await 一个 Promise 后,后续代码作为什么类型的任务恢复执行? 本文先给出可直接复述的结论,再用最小代码说明await 恢复执行 微任务 Node.js async的工作方式、判断依据、项目边界和常见误区。
在 fs 回调等 I/O 回调里创建的 Promise.then 和 setImmediate 谁先执行? 本文先给出可直接复述的结论,再用最小代码说明I/O 回调内 Promise setImmediate 执行顺序的工作方式、判断依据、项目边界和常见误区。
Node.js 中 new Promise 的 executor 是同步还是异步执行,这对错误捕获有什么影响? 本文先给出可直接复述的结论,再用最小代码说明Promise executor 同步执行 错误捕获 Node.js的工作方式、判断依据、项目边界和常见误区。
在 Node.js 中嵌套的 Promise.then 链与多个并行 Promise 的回调按什么顺序交错执行? 本文先给出可直接复述的结论,再用最小代码说明Promise then 执行顺序 嵌套 微任务队列 Node.js的工作方式、判断依据、项目边界和常见误区。
Node.js 中每个事件循环阶段结束后微任务队列是如何被清空的? 本文先给出可直接复述的结论,再用最小代码说明Node.js 微任务队列 阶段之间 清空时机的工作方式、判断依据、项目边界和常见误区。
Node.js 的 queueMicrotask() 与 process.nextTick、Promise.resolve().then() 有什么语义差别? 本文先给出可直接复述的结论,再用最小代码说明queueMicrotask process.nextTick 区别 Node.js的工作方式、判断依据、项目边界和常见误区。
官方建议哪些场景使用 process.nextTick,例如保证回调总是异步的 API 设计? 本文先给出可直接复述的结论,再用最小代码说明process.nextTick 使用场景 回调异步化的工作方式、判断依据、项目边界和常见误区。
为什么在 Node.js 中递归调用 process.nextTick 会导致 I/O 饿死,而递归 setImmediate 不会? 本文先给出可直接复述的结论,再用最小代码说明process.nextTick 递归 I/O 饿死的工作方式、判断依据、项目边界和常见误区。
process.nextTick 队列和 Promise 微任务队列都清空时谁先执行?为什么? 本文先给出可直接复述的结论,再用最小代码说明process.nextTick Promise 微任务 执行顺序的工作方式、判断依据、项目边界和常见误区。