Firefox 3.1のJavascriptマルチスレッドプログラミングができるweb workersを使ってみる
「Firefox 3.1のWeb Workersでマルチスレッド・プログラミング」
Firefox 3.1で追加されるJavascriptマルチスレッドプログラミングできるWeb Workersですが、ちょっと遊んでみました。
Chromeが発表されてからJavascriptを実行する環境が速くなって来ましたが、致命的な問題がありました。それはJavascriptではマルチスレッドで実行できないことです。
PCのCPUが、コア数を2→4と順調に増やしています。にも関わらずシングルスレッドしか動作しないJavascriptプラットフォームは、時代に取り残されてしまいます。この問題の解決策のひとつがWeb Workersです。
能書きをおいておいて、とりあえずWeb Workersを用いたサンプルを作成してみました。以前作成したコッホ曲線を描くJavascriptベンチをWeb Workersに対応してみました。
試す前にFirefox 3.1 beta 2をダウンロードしてください。作成したサンプルはFirefox 3.1以外正常に動作しないと思われます。ついでにFirefox 3.1 beta 2を起動するときに注意点として、別のFirefoxのバージョンを全て落としてから起動してください。これを行わないと、Firefox 3.1 beta 2のアイコンをダブルクリックしても、既に起動しているFirefoxのバージョンを起動します。"ヘルプ"→"Mozilla Firefoxについて"で今起動しているバージョンを確認できます。
Firefox 3.1起動後に、「Koch Curve: JavaScript Benchmark with Web Workers」にアクセスして「Start(Web Workers)」を押してください。コッホ曲線を少しずつ描いてくれます。
Web Workersを用いない例として「Start(Normal)」を押してください。この場合一気にコッホ曲線を書き上げてしまいます。
Web Workers版もNormal版もCanvasを用いてコッホ曲線を少しずつ描いています。ですが、Normal版はスレッドの概念がないため、長い計算にずっと持っていかれてしまいます。このため、描画を一気に行われます。
ですが、Web Workersを用いると描画を担当するスレッドに定期的に戻ってくるため、期待していた少しずつ描くを実践してくれます(遅いですが)。
このため、両者では同じようなこと(完全に同一ではないですが)をしているにも関わらず表示内容が違ってきます。
ついでに、Web Workersに対応したコッホ曲線を描くソースは、「ソース置き場」のjavascriptbench_koch_0.1.2.zipにあります。
Javascriptをマルチスレッドで動かすことができれば用途が大きく開かれると思います。例えば、サイトからデータをダウンロードするのにも、複数スレッドで実行すればそれだけ時間を短縮できますし、重い計算をさせながらユーザの応答に迅速に答えることも可能です。このため、Web Workersの様な仕組みが今後広がることを期待しています。
また、Javascriptのマルチスレッド環境はWeb WorkersだけでなくGoogleが開発したGearsのWorkerPoolも、同じようなことができるはずです。時間が作って今回作成したスクリプトをGears化を試みたいと思います。