
326
9
章 特殊な問題を解決するためのパターン
subsetSum.on('match', data => { //
❷
process.send({event: 'match', data: data});
});
subsetSum.on('end', data => {
process.send({event: 'end', data: data});
});
subsetSum.start();
});
これを見るとすぐに元の(同期的)
SubsetSum
をそのまま再利用していることがわかります。別の
プロセスの中にいるのですから、イベントループのブロックについて思い悩む必要はもうありません。
HTTP
リクエストはすべてメインアプリケーションのイベントループ内で中断されることなく継続して
取り扱われます。
ワーカーが子プロセスとして開始されるとき、次のようなことが起こっています。
❶
親プロセスから送られてくるメッセージのリスニングをすぐさま開始する。関数
process.on()
を使えば簡単に行える(これも
child_process.fork()
を使ってプロセスを開始したときに提
供される通信
API
の一部)。親プロセスから受け取る予定があるのは新規の
SubsetSum
のタス
クに入力を供給するメッセージだけ。メッセージを受け取るとすぐにクラス
SubsetSum
のイン
スタンスを新たに作成し、イベント
match
と
end
のリスナーを登録する。最後に
subsetSum.
start()
により計算 ...