素人がプログラミングを勉強していたブログ

プログラミング、セキュリティ、英語、Webなどのブログ since 2008

連絡先: twitter: @javascripter にどうぞ。

JavaScriptでマルチスレッド(navigator.newWorkerPool)

437152 – implement worker threadsを使ってみる。

var thread = navigator.newWorkerPool();
thread.createWorker(function(){
    setTimeout(
      clearInterval,
      1000,
      setInterval(postMessageToPool, 5, "thread1"));
  }.toSource() + "()");
thread.createWorker(function(){
    setTimeout(
      clearInterval,
      1000,
      setInterval(postMessageToPool, 5, "thread2"));
  }.toSource() + "()");
thread.messageListener = function(message){
    console.log(message);
  };

thread1, thread2, thread2, thread2, thread2, thread1, thread1, thread1, thread1, thread2, thread1, thread2 ...
といった感じに、JavaScriptがマルチスレッドで動いてる。
気を付けることは、createWorkerには文字列を渡すこと、createWorkerの中ではXMLHttpRequestとかdocumentとかに触れないこと。スレッドセーフなXHRは、まだ実装されてない。
スレッドとのやり取りは、postMessage()と、messageListenerと、postMessageToPoolを使う。文字列のみなので、JSONを使ったりする。
JavaScriptで重い処理をすることはあまり無いから、どういった時にスレッドを使うべきなのかまだ分かってない。
参考:DOMWorkerThreads current - MozillaWiki