Concurrent.Thread.jsで遊んでみる
JavaScriptでマルチスレッドプログラミングを実現するライブラリ Concurrent.Thread.js を触ってみた。このライブラリは Concurrent.Thread.Http を利用してAjaxプログラミングを楽にするために開発されたものらしい。
コードは以下のとおり。
- http://jsdo.it/__gfx__/thread-example (app)
- http://jsdo.it/__gfx__/jsthread (library)
function hello(id) { document.write("[" + id + "] " + "hello,<br />"); Concurrent.Thread.sleep(id * 1000); document.write("[" + id + "] " + "world!<br />"); } Concurrent.Thread.create(hello, 1); Concurrent.Thread.create(hello, 2); Concurrent.Thread.create(hello, 3);
Concurrent.Thread.sleep()はスレッドのコンテキストを切り替えて、さらに指定したミリセカンドだけ待ってからスレッドを再開する。果たしてこのコードを実行すると、"hello"が最初に3つ(idつきで)表示されたあと、1秒ずつ残りの"world!"が(idつきで)表示される。
以下の記事によれば、これはFunctionオブジェクトをtoString()してソースコードを得て、これを一旦構文解析したのち実行単位ごとに切り分けてソースコードを再構成し、それをeval()でコンパイルしてから実行するという力技で実現しているようだ。