Node.js 如何启动独立后台进程,detached 与 unref 各负责什么?
解释 detached 的平台差异、unref 对父事件循环引用的影响和 stdio 连接的责任,说明它们不提供守护重启或资源管理,并给出后台任务应交给进程管理器的判断依据。
Node.js · 事件循环面试题第 1 页,显示第 1–18 题,共找到 18 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
解释 detached 的平台差异、unref 对父事件循环引用的影响和 stdio 连接的责任,说明它们不提供守护重启或资源管理,并给出后台任务应交给进程管理器的判断依据。
说明同步子进程阻塞当前 Node 线程事件循环的范围,区分 spawnSync 返回结果与 execSync 抛错,并纠正 timeout 一定按时返回的误解,给出 CLI、启动任务和服务请求的选择依据。
围绕“不引入 worker_threads 时如何把一个长 CPU 计算拆小避免阻塞事件循环”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出用 setImmediate/定时器把循环切片让出事件循环及其与 Worker 方案的性能差距。
围绕“设计 Node.js 接口服务时如何判断一个任务应该卸载到 Worker 线程”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出按任务耗时与调用频率评估对事件循环的影响、给出生成器分片/Worker 的取舍标准。
围绕“在 Worker 线程中 AsyncLocalStorage 等异步上下文能否跨线程传递”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出每个 Worker 有独立事件循环与上下文、跨线程传递需显式携带数据。
围绕“为什么 Node.js 的 CPU 密集任务应该放到 worker_threads 而不是主线程”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须答出单线程事件循环被长计算阻塞会拖垮所有请求、Worker 利用多核并行。
结合事件循环延迟、CPU 栈和请求阶段耗时定位 Node.js 卡顿,给出 monitorEventLoopDelay 的纳秒转毫秒示例,说明统计窗口、采样局限和下游等待不能混为同一根因。
说明事件循环 close callbacks 只涉及部分资源关闭回调,区分 socket 生命周期、普通 EventEmitter 同名事件和自定义流实现,避免从事件名字推导固定阶段或业务成功。
围绕“JSON.parse 一个超大请求体为什么也会阻塞 Node.js 事件循环,有哪些缓解方式”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须指出 JSON 解析是同步 CPU 操作且给出流式解析或限制体积等方案。
围绕“如何用 perf_hooks 的 monitorEventLoopDelay 量化 Node.js 事件循环延迟”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明启用 histogram、读取 mean/p99 等指标并解读 lag 含义。
通过分段求和示例展示如何保存游标与累计结果、在片段间安排 setImmediate,说明首片仍同步执行、总复杂度不变,以及片段预算、取消和不可拆分计算的限制。
按回调职责解释 timers、pending callbacks、idle/prepare、poll、check 和 close callbacks,说明 libuv 1.45 后的定时器调整,并区分阶段图、nextTick 和 Promise 微任务。
围绕“Node.js 进程什么时候自然退出?哪些未决的句柄或定时器会阻止退出”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要解释事件循环在无可执行回调且无 ref 句柄时退出,及 unref 的作用。
围绕“Node.js 的 setTimeout 为什么无法保证精确的毫秒级触发,最小延迟和影响因素有哪些”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明事件循环调度与其他阶段耗时造成延迟下限,而非承诺精确唤醒。
围绕“Node.js 中每个事件循环阶段结束后微任务队列是如何被清空的”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明每个阶段回调执行完即清空 nextTick 与微任务队列,而非整个循环结束才执行。
围绕“Node.js 如何度量事件循环延迟(event loop lag),该指标升高说明服务出了什么问题”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖必须给出 setInterval 偏差或 monitorEventLoopDelay 的度量方式及升高的含义(同步阻塞/GC)。
围绕“Node.js 服务进程退出码(0/1 及 process.exitCode 与 process.exit())应该”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明设置 exitCode 让事件循环自然排空优于立即 exit()(避免截断异步写)。
围绕“Node.js 进程句柄(handle)泄漏导致无法退出,如何用 process._getActiveHandles”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明活动句柄/请求阻止事件循环退出的机制与定位手段。