SharedArrayBuffer
SharedArrayBuffer オブジェクトは、ジェネリックで固定長の生バイナリデータバッファーを表すために使用されます。ArrayBuffer オブジェクトと似ていますが、これらは共有メモリー上にビューを生成するために使用されます。ArrayBuffer と異なり、SharedArrayBuffer は分離できません。
SharedArrayBuffer はすべての主要なブラウザーで 2018 年 1 月 5 日に、Spectre への対応として無効化されましたので注意してください。Chrome では、Spectre 型脆弱性から保護するためのサイト分離機能が有効にされたプラットフォームにおいて、v67 に再度有効化されています。
構文
new SharedArrayBuffer(length)
パラメーター
length- array buffer を生成するバイト単位のサイズ。
戻り値
指定したサイズの新しい SharedArrayBuffer。コンテンツは 0 に初期化されている。
説明
メモリーの割り当てと共有
クラスター内のあるエージェントから別のエージェント (エージェントとは、ウェブページのメインプログラムまたはその web worker のひとつ) へ、SharedArrayBuffer オブジェクトを使用してメモリーを共有するために、postMessage (en-US) と structured cloning を使用します。
structured clone アルゴリズムは SharedArrayBuffers と、SharedArrayBuffers にマッピングされた TypedArrays を受け入れます。どちらの場合も SharedArrayBuffer オブジェクトは受信者に転送されて、受信側のエージェントで新たなプライベートの SharedArrayBuffer オブジェクトになります (ArrayBuffer と同じように)。しかし、2 つの SharedArrayBuffer オブジェクトから参照される共有データブロックは同一のデータブロックであり、あるエージェントによるブロックへの副作用は、結果的に他方のエージェントからも見えます。
var sab = new SharedArrayBuffer(1024);
worker.postMessage(sab);
Atomic 操作で共有メモリを更新、同期する
共有メモリーは、worker 内でもメインスレッド内でも同時に生成や更新ができます。システム(CPU や OS、ブラウザー)によっては、変更がすべてのコンテキストに通知されるまでに少々時間がかかります。同期するためには、atomic 操作が必要です。
SharedArrayBuffer オブジェクトを受け付ける API
SharedArrayBuffer の生成には new 演算子が必要
SharedArrayBuffer コンストラクターは、new 演算子で呼び出される必要があります。new 演算子なしで関数として SharedArrayBuffer コンストラクターを呼び出すと、TypeError をスローします。
var sab = SharedArrayBuffer(1024);
// TypeError: calling a builtin SharedArrayBuffer constructor
// without new is forbiddenvar sab = new SharedArrayBuffer(1024);プロパティ
SharedArrayBuffer.lengthSharedArrayBufferコンストラクターの length プロパティの値は 1。SharedArrayBuffer.prototype- すべての
SharedArrayBufferオブジェクトにプロパティ追加を許可する。
SharedArrayBuffer プロトタイプオブジェクト
すべての SharedArrayBuffer インスタンスは SharedArrayBuffer.prototype を継承しています。
プロパティ
{{page('ja/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/prototype','プロパティ')}}
メソッド
{{page('ja/Web/JavaScript/Reference/Global_Objects/SharedArrayBuffer/prototype','メソッド')}}
仕様
| 仕様 | 状態 | コメント |
|---|---|---|
| ECMAScript (ECMA-262) SharedArrayBuffer の定義 |
現行の標準 | ES2017 で初期定義。 |
| ECMAScript 2017 (ECMA-262) SharedArrayBuffer の定義 |
標準 |
ブラウザー実装状況
BCD tables only load in the browser
関連項目
AtomicsArrayBuffer- JavaScript typed arrays
- Web Workers
- parlib-simple – 同期と作業分配抽象化を提供するシンプルなライブラリー
- 共有メモリー – 簡潔なチュートリアル