SharedArrayBuffer

Объект 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.

Свойства

{{page('en-US/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/prototype','Properties')}}

Методы

{{page('en-US/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/prototype','Methods')}}

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

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

We're converting our compatibility data into a machine-readable JSON format. This compatibility table still uses the old format, because we haven't yet converted the data it contains. Find out how you can help!

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

Смотри также