共有配列バッファー(SharedArrayBuffer)

目次

SharedArrayBuffer とは

SharedArrayBuffer の作成

new SharedArrayBuffer(length, options)

共有配列バッファー(SharedArrayBuffer)を作成します。下記の例では 12 バイトの SharedArrayBuffer を作成し、それに 2バイト長×6個の要素からなる Int16Array 型付き配列をマッピングしています。

const buf = new SharedArrayBuffer(12);
const arr = new Int16Array(buf);
console.log(arr);

SharedArrayBuffer の領域拡大

SharedArrayBuffer.byteLength

SharedArrayBuffer のサイズをバイト単位で返します。

const buf = new SharedArrayBuffer(12);
console.log(buf.byteLength);            // => 12

maxByteLength

作成時に { maxByteLength: bytes } を指定することで、領域としては bytes バイトの領域をあらかじめ確保しておき、その範囲内で領域拡大可能な SharedArrayBuffer を作成することができます。プロパティ maxByteLength は作成時に指定した最大バイト数を返します。

const buf = new SharedArrayBuffer(12, { maxByteLength: 24 });
console.log(buf.byteLength);             // => 12
console.log(buf.maxByteLength);          // => 24
buf.grow(24);
console.log(buf.byteLength);             // => 24

arrayBuffer.growable

ArrayBuffer が領域拡大可能な否かを true または false で示します。

const buf = new ArrayBuffer(12, { maxByteLength: 24 });
console.log(buf.growable);             // => true

SharedArrayBuffer.grow(n)

SharedArrayBuffer を 現在のバイト数~maxByteLength の範囲内で領域拡大します。ArrayBuffer は縮小することもできますが、SharedArrayBuffer は縮小することはできません。

const buf = new SharedArrayBuffer(12, { maxByteLength: 24 });
buf.grow(24);

SharedArrayBuffer の複製

SharedArrayBuffer.slice(start, end)

新しい SharedArrayBuffer を作成し、元のバッファーの start から end - 1 バイト目の値をコピーします。end を省略した場合は最後までをコピーします。下記の例では 6 バイトの SharedArrayBuffer を作成し、その 2 バイト目から 5 - 1 = 4 バイト目の 3バイトをコピーした新たな SharedArrayBuffer を作成しています。

const buf1 = new SharedArrayBuffer(6);
const arr1 = new Int8Array(buf1);
arr1.set([1, 2, 3, 4, 5, 6]);
const buf2 = buf1.slice(2, 5);
const arr2 = new Int8Array(buf2);
console.log(arr2);                    // => Int8Array(3) [3, 4, 5]