标准答案
- worker 适合解析、压缩、加密和计算等可拆分任务,不适合无限创建或承载阻塞外部依赖。
- postMessage 通常复制或转移数据,结构化克隆会产生时间和内存成本。
- 共享内存适合高吞吐协作,但必须使用 Atomics 等同步机制并防止数据竞争。
- worker 池要限制并发、任务队列、超时、崩溃重启和优雅关闭。
题目解析
Worker Threads 把 JavaScript 计算移出主线程,适合解析、压缩、加密等可拆分 CPU 工作。消息传递会有结构化克隆或转移成本,共享内存则需要 Atomics 和明确所有权。
Worker 池必须有界,并管理任务队列、超时、取消、Worker 崩溃和结果关联。Worker 仍会消耗 CPU、内存和消息缓冲,不能用创建更多 Worker 替代容量规划。
任务状态要在提交、执行、成功、失败和取消之间持久化或可恢复。主进程重启、Worker 崩溃和客户端超时都可能让结果未知,需要幂等和状态查询。
常见误区
- 误区:每个请求创建一个 Worker。改正:使用有界 Worker 池和任务队列,按 CPU 和内存设置上限。
- 误区:共享内存没有同步协议。改正:使用 Atomics、版本或所有权规则,明确读写边界。
- 误区:Worker 错误后任务状态永久 processing。改正:记录 Worker 退出和租约,允许任务重试或进入失败状态。