SharedArrayBuffer
SharedArrayBuffer 对象用来表示一个通用的,固定长度的原始二进制数据缓冲区,类似于 ArrayBuffer 对象。对象,但它们可以用来在共享内存上创建视图。与 ArrayBuffer不同的是,SharedArrayBuffer 不能被分离。
语法
new SharedArrayBuffer(length)参数
length所创建的数组缓冲区的大小,以字节(byte)为单位。
返回值
一个大小指定的新 SharedArrayBuffer 对象。其内容被初始化为 0。
描述
分配及共享内存
为了将一个SharedArrayBuffer对象从一个用户代理共享到另一个用户代理(另一个页面的主进程或者当前页面的一个 worker )从而实现共享内存,我们需要运用 postMessage和结构化克隆算法( structured cloning )。
结构化克隆算法接收被映射到一个新的 SharedArrayBuffers对象上的 SharedArrayBuffers对象与 TypedArrays对象。在这两种映射下,这个新的 SharedArrayBuffer对象会被传递到目标用户代理的接收函数上,导致在目标用户代理产生了一个新的私有 SharedArrayBuffer对象(正如ArrayBuffer一样)。然而,这两个 SharedArrayBuffer对象指向的共享数据块其实是同一个,并且在某一代理中的一个块的副作用将最终导致另一个代理具有可见性。
var sab = new SharedArrayBuffer(1024);
worker.postMessage(sab);通过原子操作更新及同步来共享内存
共享内存能被同时创建和更新于工作者线程或主线程。依赖于系统(CPU,操作系统,浏览器),变化传递给环境需要一段时间。需要通过atomic操作来进行同步。
接受 SharedArrayBuffer 对象的API
需要 new 运算符来构造
var sab = SharedArrayBuffer(1024);
// TypeError: calling a builtin SharedArrayBuffer constructor
// without new is forbiddenvar sab = new SharedArrayBuffer(1024);属性
SharedArrayBuffer.lengthSharedArrayBuffer构造函数的 length 属性值为1。
SharedArrayBuffer.prototype允许所有 SharedArrayBuffer对象的附加属性。
SharedArrayBuffer 原型对象
所有 SharedArrayBuffer 实例继承自SharedArrayBuffer.prototype。
属性
SharedArrayBuffer.prototype.constructor指定创建对象原型的函数。初始值为标准内置SharedArrayBuffer
SharedArrayBuffer.prototype.byteLength数组的大小 (以字节为单位)。这是在构造数组并不能更改时建立的。只读。
方法
SharedArrayBuffer.prototype.slice(begin, end)返回一个新的 SharedArrayBuffer, 其内容是此 SharedArrayBuffer 的副本。如果begin或end是负数, 则引用数组末尾的索引, 而不是从开头开始。
规范
Specification | Status | Comment |
|---|---|---|
ECMAScript Latest Draft (ECMA-262)The definition of 'SharedArrayBuffer' in that specification. | Living Standard | Initial definition in ES2017. |
ECMAScript 2017 (ECMA-262)The definition of 'SharedArrayBuffer' in that specification. | Standard | |
浏览器兼容性
Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari |
|---|---|---|---|---|---|---|
Basic support | 60 2 | 16 | 55 (55) 1 | No support | No support | 10.1 |
slice() | 60 2 | 16 | 52 (52) 1 | No support | No support | 10.1 |
SAB in DataView | 60 | 16 | 53 (53) 1 | No support | No support | 10.1 |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|
Basic support | No support | No support | 55.0 (55) 1 | No support | No support | 10.1 |
slice() | No support | No support | 52.0 (52) 1 | No support | No support | 10.1 |
SAB in DataView | No support | No support | 53.0 (53) 1 | No support | No support | 10.1 |
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com

