You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向Worker共享SharedArrayBuffer的TypedArray视图,能否访问完整SharedArrayBuffer?

问题解答

能,Worker 可以访问该 TypedArray 对应的全部共享内存数据。

原因如下:

  • 基于 SharedArrayBuffer 创建的 TypedArray 并非数据存储容器,只是对底层共享内存的引用与访问接口,所有实际数据都存放在 SharedArrayBuffer 中。
  • 通过 postMessage 发送这个 TypedArray 时,浏览器不会复制底层的共享内存(这是 SharedArrayBuffer 的核心特性),Worker 端收到的 TypedArray 会直接指向同一块共享内存区域。
  • 只要 Worker 端的 TypedArray 视图参数(如数据类型、起始偏移量、长度)与主线程一致,就能直接访问全部数据;即便参数不同,也可通过重新创建视图的方式,访问共享内存内的任意合法区域。

举个实际代码示例:
主线程代码

// 创建1KB大小的共享内存
const sab = new SharedArrayBuffer(1024);
// 创建Uint8类型的视图
const uint8Arr = new Uint8Array(sab);
// 给所有位置填充数据255
uint8Arr.fill(255);
// 发送视图到Worker
const worker = new Worker('worker.js');
worker.postMessage(uint8Arr);

Worker 代码(worker.js)

self.addEventListener('message', (e) => {
  const receivedArr = e.data;
  // 访问并打印前10个元素
  console.log(receivedArr.subarray(0, 10)); 
  // 输出:Uint8Array(10) [255, 255, 255, 255, 255, 255, 255, 255, 255, 255]
});

注意:使用 SharedArrayBuffer 需要浏览器满足跨源隔离条件,即服务器需设置 Cross-Origin-Opener-Policy: same-origin 和 Cross-Origin-Embedder-Policy: require-corp 这两个HTTP响应头,否则该特性会被浏览器禁用。

内容的提问来源于stack exchange,提问作者joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 11:47:10