Concurrent.Thread.jsで遊んでみる

JavaScriptでマルチスレッドプログラミングを実現するライブラリ Concurrent.Thread.js を触ってみた。このライブラリは Concurrent.Thread.Http を利用してAjaxプログラミングを楽にするために開発されたものらしい。

コードは以下のとおり。

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()でコンパイルしてから実行するという力技で実現しているようだ。