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 forbidden
var 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