オブジェクトワーカー
Worker オブジェクトは、子スレッドを作成するために使用されるオブジェクトであり、プログラム内で作成および処理できます。Worker オブジェクトは、メイン スレッドとは異なるスレッドで実行される JavaScript プロセスとして理解できます。ワーカーはメインスレッドとメモリを共有せず、メインスレッドをブロックしない、主流の非同期プログラミング手法です。
Worker オブジェクトのコンストラクターは次のとおりです。
1new Worker(String path, Object opts = {})
で、pathこのパラメータは、新しいスレッドの JavaScript ファイル パスを指定します。たとえば、次の内容を含む work.js ファイルを作成できます。
1
2
3
4const {
Worker
} = require('worker_threads');
console.log('Hi from worker');
メイン プログラムで、次のコードを使用して work.js を実行します。
1
2
3
4const {
Worker
} = require('worker_threads');
const worker = new Worker('path/to/work.js');
実行後、メイン プログラムのコンソールに「Hi from worker」という出力が表示されます。
次の例では、長時間実行される計算があり、それを別のスレッドに入れて、メイン スレッドでの計算によってブロックされずに処理したいとします。コードは以下のように表示されます:
メインスレッド:
1
2
3
4
5
6
7
8
9
10
11
12const {
Worker
} = require('worker_threads');
// create a worker thread
const fib = new Worker(__dirname + '/fib-worker.js');
// receive the result from the worker thread
fib.onmessage = (ev) => {
console.log('result: ', ev.data);
};
fib.postMessage(40);
console.log('main thread still working');
この例では、ワーカー オブジェクトのコンストラクターを通じてフィボナッチ数列の計算を処理するワーカー スレッドを作成し、メイン スレッドは postMessage() メソッドを通じてワーカー スレッドにデータを渡し、onmessage イベントを通じて処理結果を取得します。 。同時に、メイン スレッドは、このコンピューティング タスクがワーカー スレッドに「委任」され、他の処理を続行できることを証明するために、「まだ作業中」というメッセージを表示します。
ワーカー スレッドのコード スタイルは次のとおりです。
1
2
3
4
5
6
7
8
9
10
11
12// fib-worker.js
Master.onmessage = (ev) => {
const n = ev.data;
const result = fib(n);
// Once the calculation has been completed, the result is sent back to the main thread.
Master.postMessage(result);
};
function fib(n) {
if (n <= 1) return n;
return fib(n - 1) + fib(n - 2);
}
ワーカー スレッドでは、エントリ パラメーター postMessage() を通じてメイン スレッドから送信されたメッセージをリッスンし、指定されたフィボナッチ数列を計算し、Master.postMessage() メソッドを通じて計算結果をメイン スレッドに送り返しました。
これは最も基本的な Worker の例です。Worker オブジェクトを使用して開発する場合、メイン スレッドとワーカー スレッドは完全に非同期です。各 Worker オブジェクトは別個のスレッドです。メイン スレッドでインスタンス化された Worker オブジェクトはブロックを生成しません。
相続関係
コンストラクタ
Worker
ワーカーオブジェクトコンストラクター
1
2new Worker(String path,
Object opts = {});
呼び出しパラメータ:
- path: 文字列。ワーカーエントリスクリプトを指定します。絶対パスのみを受け入れます。
- opts: オブジェクト、構築オプション、まだサポートされていません
静的プロパティ
defaultMaxListeners
整数、デフォルトのグローバル最大リスナー数
1static Integer Worker.defaultMaxListeners;
メンバーのプロパティ
onload
関数、クエリ、およびバインディングは、on("load", func); と同等のロード メッセージ イベントを受け入れます。
1Function Worker.onload;
onmessage
関数、クエリ、バインディングは、on("message", func) と同等の postMessage メッセージ イベントを受け入れます。
1Function Worker.onmessage;
onerror
関数、クエリ、バインディングは、on("error", func); と同等のエラー メッセージ イベントを受け入れます。
1Function Worker.onerror;
メンバー関数
postMessage
マスターまたはワーカーにメッセージを送信し、
1Worker.postMessage(Value data);
呼び出しパラメータ:
- data: 値、送信されるメッセージの内容を指定します
on
イベントハンドラーをオブジェクトにバインドする
1
2Object Worker.on(String ev,
Function func);
呼び出しパラメータ:
- ev: 文字列、イベントの名前を指定します
- func: 関数、イベント処理関数を指定します
返される結果:
- Object、チェーン呼び出しを容易にするためにイベント オブジェクト自体を返します。
イベントハンドラーをオブジェクトにバインドする
1Object Worker.on(Object map);
呼び出しパラメータ:
- map: オブジェクト。イベント マッピング関係を指定します。オブジェクトの属性名はイベント名として使用され、属性の値はイベント処理関数として使用されます。
返される結果:
- Object、チェーン呼び出しを容易にするためにイベント オブジェクト自体を返します。
addListener
イベントハンドラーをオブジェクトにバインドする
1
2Object Worker.addListener(String ev,
Function func);
呼び出しパラメータ:
- ev: 文字列、イベントの名前を指定します
- func: 関数、イベント処理関数を指定します
返される結果:
- Object、チェーン呼び出しを容易にするためにイベント オブジェクト自体を返します。
イベントハンドラーをオブジェクトにバインドする
1Object Worker.addListener(Object map);
呼び出しパラメータ:
- map: オブジェクト。イベント マッピング関係を指定します。オブジェクトの属性名はイベント名として使用され、属性の値はイベント処理関数として使用されます。
返される結果:
- Object、チェーン呼び出しを容易にするためにイベント オブジェクト自体を返します。
prependListener
イベントハンドラーをオブジェクトのオリジンにバインドする
1
2Object Worker.prependListener(String ev,
Function func);
呼び出しパラメータ:
- ev: 文字列、イベントの名前を指定します
- func: 関数、イベント処理関数を指定します
返される結果:
- Object、チェーン呼び出しを容易にするためにイベント オブジェクト自体を返します。
イベントハンドラーをオブジェクトのオリジンにバインドする
1Object Worker.prependListener(Object map);
呼び出しパラメータ:
- map: オブジェクト。イベント マッピング関係を指定します。オブジェクトの属性名はイベント名として使用され、属性の値はイベント処理関数として使用されます。
返される結果:
- Object、チェーン呼び出しを容易にするためにイベント オブジェクト自体を返します。
once
ワンタイム イベント ハンドラーをオブジェクトにバインドします。ワンタイム ハンドラーは 1 回だけトリガーされます。
1
2Object Worker.once(String ev,
Function func);
呼び出しパラメータ:
- ev: 文字列、イベントの名前を指定します
- func: 関数、イベント処理関数を指定します
返される結果:
- Object、チェーン呼び出しを容易にするためにイベント オブジェクト自体を返します。
ワンタイム イベント ハンドラーをオブジェクトにバインドします。ワンタイム ハンドラーは 1 回だけトリガーされます。
1Object Worker.once(Object map);
呼び出しパラメータ:
- map: オブジェクト。イベント マッピング関係を指定します。オブジェクトの属性名はイベント名として使用され、属性の値はイベント処理関数として使用されます。
返される結果:
- Object、チェーン呼び出しを容易にするためにイベント オブジェクト自体を返します。
prependOnceListener
イベントハンドラーをオブジェクトのオリジンにバインドする
1
2Object Worker.prependOnceListener(String ev,
Function func);
呼び出しパラメータ:
- ev: 文字列、イベントの名前を指定します
- func: 関数、イベント処理関数を指定します
返される結果:
- Object、チェーン呼び出しを容易にするためにイベント オブジェクト自体を返します。
イベントハンドラーをオブジェクトのオリジンにバインドする
1Object Worker.prependOnceListener(Object map);
呼び出しパラメータ:
- map: オブジェクト。イベント マッピング関係を指定します。オブジェクトの属性名はイベント名として使用され、属性の値はイベント処理関数として使用されます。
返される結果:
- Object、チェーン呼び出しを容易にするためにイベント オブジェクト自体を返します。
off
オブジェクト処理キューから関数の割り当てを解除する
1
2Object Worker.off(String ev,
Function func);
呼び出しパラメータ:
- ev: 文字列、イベントの名前を指定します
- func: 関数、イベント処理関数を指定します
返される結果:
- Object、チェーン呼び出しを容易にするためにイベント オブジェクト自体を返します。
オブジェクト処理キュー内のすべての関数をキャンセルします
1Object Worker.off(String ev);
呼び出しパラメータ:
- ev: 文字列、イベントの名前を指定します
返される結果:
- Object、チェーン呼び出しを容易にするためにイベント オブジェクト自体を返します。
オブジェクト処理キューから関数の割り当てを解除する
1Object Worker.off(Object map);
呼び出しパラメータ:
- map: オブジェクト。イベントのマッピング関係を指定します。オブジェクトの属性名はイベント名として使用され、属性の値はイベント処理関数として使用されます。
返される結果:
- Object、チェーン呼び出しを容易にするためにイベント オブジェクト自体を返します。
removeListener
オブジェクト処理キューから関数の割り当てを解除する
1
2Object Worker.removeListener(String ev,
Function func);
呼び出しパラメータ:
- ev: 文字列、イベントの名前を指定します
- func: 関数、イベント処理関数を指定します
返される結果:
- Object、チェーン呼び出しを容易にするためにイベント オブジェクト自体を返します。
オブジェクト処理キュー内のすべての関数をキャンセルします
1Object Worker.removeListener(String ev);
呼び出しパラメータ:
- ev: 文字列、イベントの名前を指定します
返される結果:
- Object、チェーン呼び出しを容易にするためにイベント オブジェクト自体を返します。
オブジェクト処理キューから関数の割り当てを解除する
1Object Worker.removeListener(Object map);
呼び出しパラメータ:
- map: オブジェクト。イベントのマッピング関係を指定します。オブジェクトの属性名はイベント名として使用され、属性の値はイベント処理関数として使用されます。
返される結果:
- Object、チェーン呼び出しを容易にするためにイベント オブジェクト自体を返します。
removeAllListeners
オブジェクトの処理キューからすべてのイベントのすべてのリスナーをキャンセルします。イベントが指定されている場合は、指定されたイベントのすべてのリスナーが削除されます。
1Object Worker.removeAllListeners(String ev);
呼び出しパラメータ:
- ev: 文字列、イベントの名前を指定します
返される結果:
- Object、チェーン呼び出しを容易にするためにイベント オブジェクト自体を返します。
オブジェクトの処理キューからすべてのイベントのすべてのリスナーをキャンセルします。イベントが指定されている場合は、指定されたイベントのすべてのリスナーが削除されます。
1Object Worker.removeAllListeners(Array evs = []);
呼び出しパラメータ:
- evs: 配列、イベントの名前を指定します
返される結果:
- Object、チェーン呼び出しを容易にするためにイベント オブジェクト自体を返します。
setMaxListeners
リスナー数のデフォルト制限 (互換性のみを目的)
1Worker.setMaxListeners(Integer n);
呼び出しパラメータ:
- n: 整数、イベントの数を指定します
getMaxListeners
互換性のみを目的として、デフォルトのリスナー制限数を取得します。
1Integer Worker.getMaxListeners();
返される結果:
- Integer、デフォルトの制限数量を返します
listeners
オブジェクトの指定されたイベントについてリスナー配列をクエリします。
1Array Worker.listeners(String ev);
呼び出しパラメータ:
- ev: 文字列、イベントの名前を指定します
返される結果:
- Array、指定されたイベントのリスナー配列を返します。
listenerCount
オブジェクトの指定されたイベントのリスナーの数をクエリします。
1Integer Worker.listenerCount(String ev);
呼び出しパラメータ:
- ev: 文字列、イベントの名前を指定します
返される結果:
- Integer、指定されたイベントのリスナーの数を返します。
オブジェクトの指定されたイベントのリスナーの数をクエリします。
1
2Integer Worker.listenerCount(Value o,
String ev);
呼び出しパラメータ:
- o: 値。クエリのオブジェクトを指定します。
- ev: 文字列、イベントの名前を指定します
返される結果:
- Integer、指定されたイベントのリスナーの数を返します。
eventNames
クエリリスナーイベント名
1Array Worker.eventNames();
返される結果:
- Array、イベント名の配列を返します。
emit
イベントをアクティブにトリガーする
1
2Boolean Worker.emit(String ev,
...args);
呼び出しパラメータ:
- ev: 文字列、イベント名
- args: ...、イベントパラメータはイベント処理関数に渡されます
返される結果:
- Boolean、イベント トリガーのステータスを返し、応答イベントがある場合は true を返し、それ以外の場合は false を返します。
toString
オブジェクトの文字列表現を返します。通常、「[Native Object]」が返されます。オブジェクトは、独自の特性に従って再実装できます。
1String Worker.toString();
返される結果:
- String、オブジェクトの文字列表現を返します。
toJSON
オブジェクトの JSON 形式表現を返します。通常は、オブジェクトによって定義された読み取り可能なプロパティのコレクションを返します。
1Value Worker.toJSON(String key = "");
呼び出しパラメータ:
- key: 文字列、使用されません
返される結果:
- Value、シリアル化可能な JSON を含む値を返します