SharedArrayBuffer
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
WebGLRenderingContext.bufferData()
WebGLRenderingContext.bufferSubData()
WebGL2RenderingContext.getBufferSubData()
需要 new 运算符来构造
SharedArrayBuffer
需要new
运算符来构造一个构造函数. 作为函数来调用一个 SharedArrayBuffer
构造函数时,如果不用new
运算符,将会抛出一个 TypeError
异常。
var sab = SharedArrayBuffer(1024
// TypeError: calling a builtin SharedArrayBuffer constructor
// without new is forbidden
var sab = new SharedArrayBuffer(1024
属性
SharedArrayBuffer.lengthSharedArrayBuffer
构造函数的 length 属性值为1。
SharedArrayBuffer 原型对象
所有 SharedArrayBuffer
实例继承自SharedArrayBuffer.prototype
。
属性
SharedArrayBuffer.prototype.constructor
指定创建对象原型的函数。初始值为标准内置SharedArrayBuffer
方法
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 |