Этот перевод не завершён. Пожалуйста, помогите перевести эту статью с английского
Объект 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
WebGLRenderingContext.bufferData()WebGLRenderingContext.bufferSubData()WebGL2RenderingContext.getBufferSubData()
Конструкции требуют оператор 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
SharedArrayBufferconstructor. SharedArrayBuffer.prototype.byteLengthRead 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
SharedArrayBufferwhose contents are a copy of thisSharedArrayBuffer's bytes frombegin, inclusive, up toend, exclusive. If eitherbeginorendis 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
Смотри также
AtomicsArrayBuffer- 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