在线文档教程

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 的副本。如果beginend是负数, 则引用数组末尾的索引, 而不是从开头开始。

规范

SpecificationStatusComment
ECMAScript Latest Draft (ECMA-262)The definition of 'SharedArrayBuffer' in that specification.Living StandardInitial definition in ES2017.
ECMAScript 2017 (ECMA-262)The definition of 'SharedArrayBuffer' in that specification.Standard

浏览器兼容性

FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
Basic support60 21655 (55) 1No supportNo support10.1
slice()60 21652 (52) 1No supportNo support10.1
SAB in DataView601653 (53) 1No supportNo support10.1

FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari Mobile
Basic supportNo supportNo support55.0 (55) 1No supportNo support10.1
slice()No supportNo support52.0 (52) 1No supportNo support10.1
SAB in DataViewNo supportNo support53.0 (53) 1No supportNo support10.1