使用 SharedArrayBuffer 进行多线程编程时,Atomics 对象提供哪些操作来避免竞态?
围绕“使用 SharedArrayBuffer 进行多线程编程时,Atomics 对象提供哪些操作来避免竞态”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕列举原子操作如 add, compareExchange, wait 等,不深入实现。
浏览器 · Worker 与线程协作面试题第 1 页,显示第 1–42 题,共找到 42 道完整解析,可继续按分类、标签与关键词缩小范围。
按稳定语义路径排序
围绕“使用 SharedArrayBuffer 进行多线程编程时,Atomics 对象提供哪些操作来避免竞态”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕列举原子操作如 add, compareExchange, wait 等,不深入实现。
本题解释 DedicatedWorkerGlobalScope 与 window 的关键差异:self 指向该作用域而非 window,postMessage 专门向父线程通信,close 终止 Worker。同时提及 DOM 缺失、requestAnimationFrame 可用等边界。
围绕“为什么使用 SharedArrayBuffer 需要启用跨源隔离(cross-origin isolation)”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释安全原因,以及必须用 COOP 和 COEP 响应头。
本题解释 Web Worker 不阻塞主线程的原因:独立线程与事件循环、结构化克隆消息通信,结合场景与边界说明其实践条件与限制。
围绕“Service(服务)Worker 的生命周期包括哪几个阶段?各阶段对应哪些事件”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕重点在 install/activate/fetch 等事件。
围绕“Service(服务)Worker 如何与打开的页面进行双向通信”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕通过 postMessage 与 Client 交互。
围绕“Service(服务)Worker 的 fetch 事件如何拦截并处理页面发出的网络请求”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释 respondWith 的方法与缓存策略的基础,不深入到 Cache API。
围绕“当 Service(服务)Worker 的脚本文件更新时,浏览器如何决定是否启用新版本”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要比较脚本内容变化与 skipWaiting。
围绕“SharedArrayBuffer 在 Worker 之间共享内存时,它的内存可见性如何保证”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要说明需要 Atomics 进行同步,且需要跨源隔离上下文。
围绕“共享 Worker 如何向它所有的连接端口广播消息”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕遍历 ports 或用 MessageChannel 的替代。
共享 Worker 的核心是重复使用同一线程,多个客户端用独立的 MessagePort 相连。本文讲解连接流程、端口激活和 worker 生命周期,并指出常见坑。
围绕“用 SharedWorker 时,客户端通过 port 的 postMessage 与 onmessage 通信,需”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕必须调用 port.start() 或设置 onmessage。
本题解释 Transferable 对象(如 ArrayBuffer)在 Worker postMessage 中的零拷贝传递原理:共享所有权转移而非复制,原上下文对象被分离;对比结构化克隆,突出性能与安全优势,并给出使用边界和一些可转移对象类型。
讲解浏览器中专用 Worker、共享 Worker、Service Worker 三类线程的职责、生命周期差异,给出选型条件、常见误用边界与判断方法。
围绕“BroadcastChannel 和 SharedWorker 在跨标签页通信上有什么不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕广播频道与共享 worker 的数据缓存和生命周期对比。
围绕“两个消息在 Worker 和主线程之间发送时,它们的到达顺序能保证吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖消息按发送顺序传递,但注意不同通道(如 port1 和 port2)的顺序。
围绕“在 Worker 中使用 console.log 的输出会显示在浏览器开发者工具哪里”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕在 DevTools worker 上下文中查看。
围绕“postMessage 传递不可克隆的对象(如函数、DOM 节点)时会怎样”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕触发异常及检查,不涵盖 HTML 规范。
围绕“在一个 Worker 中的全局变量能否在多个消息任务之间共享”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕强调 Worker 每次消息处理之间变量会保留。
围绕“Worker 之间互相等待消息时可能出现死锁吗?如何避免”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕事件驱动通常无锁,但需要避免无限等待。
围绕“如何检测浏览器是否支持某个 Worker 特性(如 SharedWorker 或 SharedArrayBuffer”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕通过 typeof 或 条件判断。
围绕“Worker 内部抛出的异常如何传递到主线程并被捕获”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕事件 error 与 messageerror 的区别。
围绕“在 Worker 中抛出的 Promise 拒绝会不会触发全局错误事件”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕未处理的 Promise 在 worker 中也触发 unhandledrejection。
围绕“Worker 里的事件循环和主线程的事件循环是完全独立的吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕每个独立全局都有独立事件循环,说明不会相互阻塞。
围绕“在 Worker 中通过 importScripts() 加载多个脚本时,执行的顺序和错误处理是怎样的”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕同步加载,顺序执行,错误中断。
围绕“在一个 Worker 内部还能再创建新的 Worker 吗?嵌套 Worker 有什么限制”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕支持嵌套专用 Worker,但注意共享和 Service Worker 的差异。
解释 Web Worker 可访问与不可访问的 API 边界:独立全局作用域无 window 和 DOM,但保留网络、存储、定时器等能力,并给出工程判断方法。
围绕“有哪些常见的 Worker 内存泄漏场景,比如忘记 terminate 或停止端口”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕不用的 worker 和端口要关闭,注意事件监听。
围绕“MessageChannel 和 MessagePort 与 Worker 的 postMessage 有什么关系”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕如何用 MessageChannel 让两个 Worker 直接通信。
围绕“在 Worker 中用 type='module' 加载 ES 模块脚本与经典脚本有何不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕支持 import/export,且为异步加载。
围绕“在 Worker 中可以使用 XMLHttpRequest 或 fetch 发起网络请求吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕支持 XHR 和 fetch,但注意同源策略与 CORS。
围绕“在 Worker 中监听消息时,用 onmessage 属性和 addEventListener('message'”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕事件处理器属性覆盖行为与多个监听器共存。
围绕“当需要并行执行多个计算任务时,使用一个 Worker 池(pool)比单个 Worker 有什么好处”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕多个 worker 提升并行度,但注意资源开销。
围绕“在 Worker 与主线程之间如何处理请求-响应的模式(如消息 ID)?没有现成的 API,怎么实现”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕如何用 message data 的 id 字段匹配响应。
围绕“在主线程与 Worker 之间用 postMessage 传递复杂对象时,数据是如何拷贝的”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖解释结构化克隆算法的拷贝行为,不涵盖 Transferable 对象。
围绕“Worker 能访问主页面所在的 cookie 吗”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕Worker 没有 DOM 但可 fetch 时携带 cookie,但无法直接读 document.cookie。
本题解释加载Worker脚本时的同源与CORS规则,包括跨域时所需的HTTP头、file协议限制、以及模块脚本的额外MIME要求,并提供实际场景与判断方法。
围绕“普通 Web Worker 和 Service(服务)Worker 在被用户关闭标签页后的生命周期有何不同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕专用 worker 被终止,service worker 可能存活。
围绕“能否继承 Worker 类来创建自定义 Worker”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕可以继承,但实际中可能不如封装。
本文解释 Worker.terminate() 的强制终止机制,包括对运行中任务、事件循环、资源清理的影响,并比较与正常结束的区别,给出工程场景和边界条件。
围绕“在 Worker 内部调用 self.close() 和主线程调用 worker.terminate() 有什么异同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖需要比较主动关闭与外部终止,及各自触发的事件。
围绕“Worker 中支持 setTimeout 和 setInterval 吗?它们与主线程有何异同”给出直接结论、机制拆解、可复现验证、常见误区与追问,重点覆盖回答需要围绕同样支持,但不涉及 requestAnimationFrame。