SharedArrayBuffer
オブジェクトは、ジェネリックで固定長の生バイナリデータバッファーを表すために使用されます。ArrayBuffer
オブジェクトと似ていますが、これらは共有メモリー上にビューを生成するために使用されます。ArrayBuffer
と異なり、SharedArrayBuffer
は分離できません。
SharedArrayBuffer
はすべての主要なブラウザーで 2018 年 1 月 5 日に、Spectre への対応として無効化されましたので注意してください。Chrome では、Spectre 型脆弱性から保護するためのサイト分離機能が有効にされたプラットフォームにおいて、v67 に再度有効化されています。
The source for this interactive example is stored in a GitHub repository. If you'd like to contribute to the interactive examples project, please clone https://github.com/mdn/interactive-examples and send us a pull request.
構文
new SharedArrayBuffer(length)
パラメーター
length
- array buffer を生成するバイト単位のサイズ。
戻り値
指定したサイズの新しい SharedArrayBuffer
。コンテンツは 0 に初期化されている。
説明
メモリーの割り当てと共有
クラスター内のあるエージェントから別のエージェント (エージェントとは、ウェブページのメインプログラムまたはその web worker のひとつ) へ、SharedArrayBuffer
オブジェクトを使用してメモリーを共有するために、postMessage
と 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 forbidden
var sab = new SharedArrayBuffer(1024);
プロパティ
SharedArrayBuffer.length
SharedArrayBuffer
コンストラクターの length プロパティの値は 1。SharedArrayBuffer.prototype
- すべての
SharedArrayBuffer
オブジェクトにプロパティ追加を許可する。
SharedArrayBuffer プロトタイプオブジェクト
すべての SharedArrayBuffer
インスタンスは SharedArrayBuffer.prototype
を継承しています。
プロパティ
- SharedArrayBuffer.prototype.constructor
- オブジェクトの prototype を生成する関数を指定する。初期値は標準ビルトインの
SharedArrayBuffer
コンストラクタである。 SharedArrayBuffer.prototype.byteLength
読取専用- 配列のバイト単位でのサイズ。これは配列が生成されたときに決定され、変更できない。 読み取り専用。
メソッド
SharedArrayBuffer.prototype.slice(begin, end)
begin
からend
までのSharedArrayBuffer
バイトのコピーを含む新しいSharedArrayBuffer
を返す。begin
かend
が負数だった場合、最初から参照するのとは対照的に、配列の終わりからインテックスを参照します。
仕様
仕様 | 状態 | コメント |
---|---|---|
ECMAScript (ECMA-262) SharedArrayBuffer の定義 |
現行の標準 | ES2017 で初期定義。 |
ECMAScript 2017 (ECMA-262) SharedArrayBuffer の定義 |
標準 |
ブラウザー実装状況
BCD tables only load in the browser
関連項目
Atomics
ArrayBuffer
- JavaScript typed arrays
- Web Workers
- parlib-simple – 同期と作業分配抽象化を提供するシンプルなライブラリー
- 共有メモリー – 簡潔なチュートリアル