首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SharedArrayBuffer

SharedArrayBuffer?对象用来表示一个通用的,固定长度的原始二进制数据缓冲区,类似于?ArrayBuffer 对象。对象,但它们可以用来在共享内存上创建视图。与 ArrayBuffer不同的是,SharedArrayBuffer 不能被分离。

语法

代码语言:javascript
复制
new SharedArrayBuffer(length)

参数

length所创建的数组缓冲区的大小,以字节(byte)为单位。

返回值

一个大小指定的新?SharedArrayBuffer 对象。其内容被初始化为 0。

描述

分配及共享内存

为了将一个SharedArrayBuffer对象从一个用户代理共享到另一个用户代理(另一个页面的主进程或者当前页面的一个?worker?)从而实现共享内存,我们需要运用?postMessage和结构化克隆算法(?structured cloning?)。

结构化克隆算法接收被映射到一个新的?SharedArrayBuffers对象上的?SharedArrayBuffers对象与?TypedArrays对象。在这两种映射下,这个新的?SharedArrayBuffer对象会被传递到目标用户代理的接收函数上,导致在目标用户代理产生了一个新的私有?SharedArrayBuffer对象(正如ArrayBuffer一样)。然而,这两个?SharedArrayBuffer对象指向的共享数据块其实是同一个,并且在某一代理中的一个块的副作用将最终导致另一个代理具有可见性。

代码语言:javascript
复制
var sab = new SharedArrayBuffer(1024);
worker.postMessage(sab);

通过原子操作更新及同步来共享内存

共享内存能被同时创建和更新于工作者线程或主线程。依赖于系统(CPU,操作系统,浏览器),变化传递给环境需要一段时间。需要通过atomic操作来进行同步。

接受?SharedArrayBuffer 对象的API

需要?new?运算符来构造

SharedArrayBuffer?需要new运算符来构造一个构造函数. 作为函数来调用一个?SharedArrayBuffer构造函数时,如果不用new运算符,将会抛出一个?TypeError异常。

代码语言:javascript
复制
var sab = SharedArrayBuffer(1024);
// TypeError: calling a builtin SharedArrayBuffer constructor 
// without new is forbidden
代码语言:javascript
复制
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 的副本。如果beginend是负数, 则引用数组末尾的索引, 而不是从开头开始。

规范

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

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com