Объект SharedArrayBuffer
используется для создания разделенного буфера фиксированной длины для хранения примитивных бинарных данных, подобно объекту ArrayBuffer
, но могут быть использованы для создания обзора на разделенную память. В отличие от ArrayBuffer
, SharedArrayBuffer
не может быть отсоединен.
Синтаксис
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')}}
Спецификации
Specification | Status | Comment |
---|---|---|
ECMAScript (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
Смотри также
Atomics
ArrayBuffer
- JavaScript typed arrays
- Web Workers
- parlib-simple – a simple library providing synchronization and work distribution abstractions.
- Shared Memory – a brief tutorial
-
A Taste of JavaScript’s New Parallel Primitives – Mozilla Hacks