ワーカプールのテクノロジー

まず先に、前提知識として知っておきたいのが「ワーカプールは『スレッド』とは異なる」ということだ。どちらかというと「マルチプロセス」に近い。この違いはつまり、「各ワーカは変数や関数等の状態を共有しない」ということだ。

生成元のワーカだろうと、他のワーカの変数にアクセスすることはできない

このことにより、バックグラウンドで動作するワーカはDOMの操作を行うことができない、という制限がある。UIの変更を行えるのは、メインのワーカ(通常のJavaScriptコンテキスト)のみだ。重要なことなので覚えておいてほしい。

変数などの状態を共有しないのであれば、ワーカ同士はどうやってコミュニケーションするのか? そのために、単純な文字列をメッセージとしてワーカに送信する仕組みが用意されている。

ワーカ同士のメッセージ通信

各ワーカはIDを持っており、そのIDを使用して任意のワーカに文字列を送信できる。文字列だけというのは制限がきつすぎるようにも思うが、JavaScriptにはeval関数が存在するのでその心配は無用だ。送信側はJSON形式の文字列を送り、受信側でeval関数を用いてJavaScriptオブジェクトに変換するという可能性を考えると、送信できるオブジェクトには制限がないと言えるだろう。

次ページではいよいよ、サンプルコードを用いてワーカプールのプログラミングを解説しよう。