В процессе перевода.

Объект SharedArrayBuffer используется для создания разделенного буфера фиксированной длины для хранения примитивных бинарных данных, подобно объекту ArrayBuffer, но могут быть использованы для создания обзора на разделенную память. В отличие от ArrayBufferSharedArrayBuffer не может быть отсоединен.

Синтаксис

new SharedArrayBuffer(length)

Параметры

length
Размер, в байтах, для создания буферного массива.

Возвращаемое значение

Новый объект SharedArrayBuffer указаной длины. Его содержимое после инициализаци равно 0.

Описание

Распределение и разделение память

Для разделения памяти с помощью объекта SharedArrayBuffer между одним агентом в кластере и другим (агент может быть как основной программой web-страницы, так и одним из web-workers), используются postMessage и structured cloning.

Алгоритм структурированного клонирования принимает SharedArrayBuffers и TypedArrays, отображенный в SharedArrayBuffers. В обоих случаях, объект  SharedArrayBuffer передается получателю, результируя в новый, приватный объект SharedArrayBuffer внутри агента-получателя (так же как для ArrayBuffer). Однако, блок общих данных, на который ссылаются оба объекта SharedArrayBuffer, это один и тот же блок данных, и сторонние эффекты в блоке в одном из агентов в итоге станут заметны в другом агенте.

var sab = new SharedArrayBuffer(1024);
worker.postMessage(sab);

Обновление и синхронизация разделенной памяти с помощью Атомарных операций

Разделенная память может быть создана и изменена одновременно в  workers или основном потоке. В зависимости от системы (ЦПУ, ОС, браузер) может уйти время пока изменения будут распространены по всем контекстам. Для синхронизации необходимы атомарные операции .

API, принимающие объекты SharedArrayBuffer

Конструкции требуют оператор new

Конструторы SharedArrayBuffer необходимо вызывать с помощью оператора new. Вызов конструктора SharedArrayBuffer как функции без указания new, вызовет ошибку TypeError.

var sab = SharedArrayBuffer(1024);
// TypeError: вызов встроенного конструктора SharedArrayBuffer 
// без new запрещено
var sab = new SharedArrayBuffer(1024);

Свойства

SharedArrayBuffer.length
Длина конструктора SharedArrayBuffer, чье значение равно 1.
SharedArrayBuffer.prototype
Позволяет дополнительные свойства для всхе объектов SharedArrayBuffer.

SharedArrayBuffer объект prototype

Все экземпляры SharedArrayBuffer наследуются от SharedArrayBuffer.prototype.

Свойства

SharedArrayBuffer.prototype.constructor
Specifies the function that creates an object's prototype. The initial value is the standard built-in SharedArrayBuffer constructor.
SharedArrayBuffer.prototype.byteLength Read only
The size, in bytes, of the array. This is established when the array is constructed and cannot be changed. Read only.

Методы

SharedArrayBuffer.prototype.slice(begin, end)
Returns a new SharedArrayBuffer whose contents are a copy of this SharedArrayBuffer's bytes from begin, inclusive, up to end, exclusive. If either begin or end is negative, it refers to an index from the end of the array, as opposed to from the beginning.

Спецификации

Specification Status Comment
ECMAScript Latest Draft (ECMA-262)
Определение 'SharedArrayBuffer' в этой спецификации.
Живой стандарт Initial definition in ES2017.
ECMAScript 2017 (ECMA-262)
Определение 'SharedArrayBuffer' в этой спецификации.
Стандарт  

Поддержка браузерами

Feature Chrome Edge Firefox (Gecko) Internet Explorer Opera Safari
Basic support Нет [2] Нет 55 (55) [1] Нет Нет 10.1
slice() Нет Нет 52 (52) [1] Нет Нет 10.1
SAB in DataView Нет Нет 53 (53) [1] Нет Нет 10.1
Feature Android Chrome for Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support Нет Нет 55.0 (55) [1] Нет Нет 10.1
slice() Нет Нет 52.0 (52) [1] Нет Нет 10.1
SAB in DataView Нет Нет 53.0 (53) [1] Нет Нет 10.1

[1] Enabled by default in Firefox 55. In Firefox version 46 until version 54, this feature is disabled by a preference setting (in about:config, set javascript.options.shared_memory to true). 

[2] The implementation is under development and needs these runtime flags: --js-flags=--harmony-sharedarraybuffer --enable-blink-feature=SharedArrayBuffer

Смотри также

Метки документа и участники

 Внесли вклад в эту страницу: scilganon, curdwithraisins
 Обновлялась последний раз: scilganon,