web worker 执行上下文完全独立于主线程,拥有专属 workerglobalscope,不共享 window、dom、变量等;通信仅通过 postmessage 实现结构化克隆或 transferable 零拷贝;错误需手动捕获上报;sharedarraybuffer 为唯一共享内存例外,但需跨域隔离与 atomics 同步。

Web Worker 中的 JavaScript 执行上下文是完全独立于主线程的,不是“线程共享变量”,而是“进程级隔离”的新 JS 环境。
执行上下文彼此不可见
每个 Worker 拥有自己专属的全局对象(WorkerGlobalScope),它不继承主线程的 window、document、localStorage 等任何 API。你在主线程定义的变量、函数、类,Worker 里根本访问不到;反过来也一样。
- Worker 内部没有
window,不能用alert()、document.querySelector() - 没有
console的标准支持(部分浏览器允许console.log,但输出位置不保证) - 无法读写 DOM,也不能监听用户事件(如 click、scroll)
- 即使同名全局变量,在主线程和 Worker 中也是两个完全不同的内存副本
通信必须显式发起
主线程与 Worker 之间没有隐式数据同步机制,所有信息交换都依赖 postMessage() 和 onmessage。传输的数据会被结构化克隆(structured clone),也就是深拷贝——原始对象不会被共享,更不会被引用。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 传普通对象:自动序列化,支持 JSON 兼容类型(Number、String、Array、Object、Date、RegExp 等)
- 传大数组或二进制数据:可用
Transferable(如ArrayBuffer)实现零拷贝,提升性能 - 不支持函数、DOM 节点、
undefined、Symbol、循环引用对象 - 错误不会自动冒泡到主线程,需在 Worker 内主动监听
onerror并postMessage上报
运行环境自成一体
Worker 的执行上下文具备完整 JS 运行能力,但受限于浏览器沙箱策略:
- 有自己的
self(等价于主线程的window)、setTimeout、fetch、atob等基础 API - 可使用
importScripts()加载同源脚本,或以type: "module"创建模块化 Worker - 能打开自己的 IndexedDB 数据库,但不能访问主线程的存储
- 受同源策略约束,不能加载跨域脚本
- 需主动调用
self.close()结束自身,浏览器不会自动回收闲置 Worker
SharedArrayBuffer 是例外,但需严格条件
若真需要内存共享,必须组合使用 SharedArrayBuffer + Atomics,且满足:
- 页面启用跨域隔离(
crossorigin属性 +COEP/COOPHTTP 头) - Worker 和主线程都持有同一块
SharedArrayBuffer的引用 - 所有读写操作必须通过
Atomics方法(如Atomics.add)进行,否则存在竞态风险 - 这种模式非常规,仅适用于高性能计算场景,日常开发中几乎不用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










