JavaScript中利用SharedArrayBuffer在Worker间共享内存

张开发
2026/6/9 13:47:15 15 分钟阅读
JavaScript中利用SharedArrayBuffer在Worker间共享内存
SharedArrayBuffer 是 JavaScript 中实现 Worker 间真正共享内存的核心机制需配合 TypedArray 和 Atomics 使用且依赖跨域隔离策略启用。SharedArrayBuffer 是 JavaScript 中实现 Worker 之间真正共享内存的核心机制它允许多个线程如主线程与 Web Worker或多个 Worker 之间直接读写同一块内存区域从而避免序列化/反序列化的开销提升高性能计算、实时音视频处理、游戏逻辑同步等场景的效率。SharedArrayBuffer 的基本用法SharedArrayBuffer 本身不提供读写能力需配合 TypedArray如 Int32Array、Float64Array使用创建 SharedArrayBuffer需指定字节长度必须是整数且现代浏览器通常要求为 4096 字节对齐以提升性能 用 TypedArray 包装它获得可操作的视图 通过 .postMessage(buffer, [buffer]) 将 buffer 转移给 Worker注意必须在 transfer list 中显式传入否则只传递拷贝示例主线程const sab new SharedArrayBuffer(1024);brconst sharedInts new Int32Array(sab);brbr// 初始化一个标志位用于同步brAtomics.store(sharedInts, 0, 0); // 索引 0 设为 0brbr// 启动 Worker 并传入共享内存brconst worker new Worker(worker.js);brworker.postMessage({ sab }, [sab]); // 关键[sab] 表示转移所有权跨 Worker 同步必须用 Atomics多个 Worker 同时读写 SharedArrayBuffer 时普通赋值arr[i] 1不是原子操作可能导致竞态条件。因此所有共享内存的读写和同步都必须通过 Atomics API立即学习“Java免费学习笔记深入”Atomics.load(arr, index)安全读取 Atomics.store(arr, index, value)安全写入 Atomics.add(arr, index, delta)原子加法常用于计数器 Atomics.wait(arr, index, expectedValue, timeout) Atomics.notify()实现阻塞等待与唤醒类似条件变量例如 Worker 中等待主线程“发号” 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手依托大模型帮助用户记录、整理和分析音视频内容体验用大模型做音视频笔记、整理会议记录。

更多文章