From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../global_objects/sharedarraybuffer/index.html | 209 +++++++++++++++++++++ 1 file changed, 209 insertions(+) create mode 100644 files/ru/web/javascript/reference/global_objects/sharedarraybuffer/index.html (limited to 'files/ru/web/javascript/reference/global_objects/sharedarraybuffer') diff --git a/files/ru/web/javascript/reference/global_objects/sharedarraybuffer/index.html b/files/ru/web/javascript/reference/global_objects/sharedarraybuffer/index.html new file mode 100644 index 0000000000..884ab88fa1 --- /dev/null +++ b/files/ru/web/javascript/reference/global_objects/sharedarraybuffer/index.html @@ -0,0 +1,209 @@ +--- +title: SharedArrayBuffer +slug: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer +translation_of: Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer +--- +
{{JSRef}}
+ +

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

+ +

Синтаксис

+ +
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)}} операции .

+ +

API, принимающие объекты 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.
+
{{jsxref("SharedArrayBuffer.prototype")}}
+
Позволяет дополнительные свойства для всех объектов 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')}}

+ +

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

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('ESDraft', '#sec-sharedarraybuffer-objects', 'SharedArrayBuffer')}}{{Spec2('ESDraft')}}Initial definition in ES2017.
{{SpecName('ES8', '#sec-sharedarraybuffer-objects', 'SharedArrayBuffer')}}{{Spec2('ES8')}} 
+ +

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

+ +

{{CompatibilityTable}}

+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureChromeEdgeFirefox (Gecko)Internet ExplorerOperaSafari
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")}}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari 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

+ +

Смотри также

+ + -- cgit v1.2.3-54-g00ecf