--- title: SharedArrayBuffer slug: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer translation_of: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer ---
Объект SharedArrayBuffer
используется для создания разделённого буфера фиксированной длины для хранения примитивных бинарных данных, подобно объекту {{jsxref("ArrayBuffer")}}, но могут быть использованы для создания обзора на разделённую память. В отличие от ArrayBuffer
, SharedArrayBuffer
не может быть отсоединён.
new SharedArrayBuffer(length)
length
Новый объект SharedArrayBuffer
указанной длины. Его содержимое после инициализации равно 0.
Для разделения памяти с помощью объекта {{jsxref("SharedArrayBuffer")}} между одним агентом в кластере и другим (агент может быть как основной программой web-страницы, так и одним из web-workers), используются postMessage
и structured cloning.
Алгоритм структурированного клонирования принимает SharedArrayBuffers
и TypedArrays,
отображённый в SharedArrayBuffers
. В обоих случаях, объект SharedArrayBuffer
передаётся получателю, результируя в новый, приватный объект SharedArrayBuffer внутри агента-получателя (так же как для {{jsxref("ArrayBuffer")}}). Однако, блок общих данных, на который ссылаются оба объекта SharedArrayBuffer,
это один и тот же блок данных, и сторонние эффекты в блоке в одном из агентов в итоге станут заметны в другом агенте.
var sab = new SharedArrayBuffer(1024); worker.postMessage(sab);
Разделённая память может быть создана и изменена одновременно в workers или основном потоке. В зависимости от системы (ЦПУ, ОС, браузер) может уйти время пока изменения будут распространены по всем контекстам. Для синхронизации необходимы {{jsxref("Атомарные", "атомарные", "", 1)}} операции .
SharedArrayBuffer
new
Конструкторы SharedArrayBuffer
необходимо вызывать с помощью оператора {{jsxref("Operators/new", "new")}}. Вызов конструктора SharedArrayBuffer
как функции без указания new
, вызовет ошибку {{jsxref("TypeError")}}.
var sab = SharedArrayBuffer(1024); // TypeError: вызов встроенного конструктора SharedArrayBuffer // без new запрещено
var sab = new SharedArrayBuffer(1024);
SharedArrayBuffer.length
SharedArrayBuffer,
чьё значение равно 1.SharedArrayBuffer
.SharedArrayBuffer
объект prototypeВсе экземпляры SharedArrayBuffer
наследуются от {{jsxref("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 |
---|---|---|
{{SpecName('ESDraft', '#sec-sharedarraybuffer-objects', 'SharedArrayBuffer')}} | {{Spec2('ESDraft')}} | Initial definition in ES2017. |
{{SpecName('ES8', '#sec-sharedarraybuffer-objects', 'SharedArrayBuffer')}} | {{Spec2('ES8')}} |
{{CompatibilityTable}}
Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic support | {{CompatNo}} [2] | {{CompatNo}} | {{CompatGeckoDesktop("55")}} [1] | {{CompatNo}} | {{CompatNo}} | {{CompatSafari("10.1")}} |
slice() |
{{CompatNo}} | {{CompatNo}} | {{CompatGeckoDesktop("52")}} [1] | {{CompatNo}} | {{CompatNo}} | {{CompatSafari("10.1")}} |
SAB in DataView | {{CompatNo}} | {{CompatNo}} | {{CompatGeckoDesktop("53")}} [1] | {{CompatNo}} | {{CompatNo}} | {{CompatSafari("10.1")}} |
Feature | Android | Chrome for Android | Firefox Mobile (Gecko) | IE Mobile | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Basic support | {{CompatNo}} | {{CompatNo}} | {{CompatGeckoMobile("55")}} [1] | {{CompatNo}} | {{CompatNo}} | {{CompatSafari("10.1")}} |
slice() |
{{CompatNo}} | {{CompatNo}} | {{CompatGeckoMobile("52")}} [1] | {{CompatNo}} | {{CompatNo}} | {{CompatSafari("10.1")}} |
SAB in DataView | {{CompatNo}} | {{CompatNo}} | {{CompatGeckoMobile("53")}} [1] | {{CompatNo}} | {{CompatNo}} | {{CompatSafari("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
A Taste of JavaScript’s New Parallel Primitives – Mozilla Hacks