- Web Workersを使用する方法: Web WorkersはJavaScriptのマルチスレッディングを実現するための機能です。Web Workersを使用すると、バックグラウンドでスクリプトを実行することができます。
以下は、Web Workersを使用して計算を並列化する例です。
// メインスレッドのコード
// Web Workerを生成
const worker = new Worker('worker.js');
// メッセージを送信
worker.postMessage({ data: [1, 2, 3, 4, 5] });
// メッセージを受信
worker.onmessage = function(event) {
console.log('計算結果:', event.data);
};
// worker.js内のコード
// メッセージの受信
self.onmessage = function(event) {
const data = event.data;
// 計算を実行
const result = performCalculation(data);
// メッセージを送信
self.postMessage(result);
};
// 計算を実行する関数
function performCalculation(data) {
// 複雑な計算処理
// ...
return result;
}
- SharedArrayBufferとAtomicsを使用する方法: SharedArrayBufferとAtomicsを使用すると、複数のスレッド間で共有メモリを使用してデータをやり取りすることができます。
以下は、SharedArrayBufferとAtomicsを使用してカウンターをインクリメントする例です。
// メインスレッドのコード
// 共有メモリの作成
const sharedBuffer = new SharedArrayBuffer(4);
const counter = new Int32Array(sharedBuffer);
// スレッドを生成
const worker = new Worker('worker.js');
// カウンターをインクリメントする関数
function incrementCounter() {
Atomics.add(counter, 0, 1);
}
// メッセージを送信
worker.postMessage({ increment: incrementCounter, counter });
// カウンターの値を表示
console.log('カウンターの値:', counter[0]);
// worker.js内のコード
// メッセージの受信
self.onmessage = function(event) {
const { increment, counter } = event.data;
// カウンターをインクリメント
increment();
// カウンターの値を送信
self.postMessage(counter[0]);
}
これらはJavaScriptでマルチスレッディングを実現するための2つの一般的な方法です。どちらの方法も、パフォーマンスの向上や処理の並列化に役立ちます。ただし、注意点としては、マルチスレッディングを適切に扱うためには、スレッド間のデータ同期や競合状態の管理に注意が必要です。