HTML5 Web Worker

HTML5 Web Worker について勉強。meeting/20100717 – SSS(G)

workerオブジェクトを生成するときに、登録するメソッドを記載したJavaScriptを指定する。この内容がUI用オブジェクトと結びついているスレッドオブジェクトに登録され、かつ、workerオブジェクトと対応するスレッドオブジェクトが連携するように管理されているよう。ここでは、workerオブジェクトと対応するスレッドオブジェクトをworkerThreadとすると、次のように処理が流れる。

コンストラクト
workerオブジェクトとworkerThreadオブジェクトが生成される。workerThreadオブジェクトはworkerオブジェクトをnewした方からは見えない。

var worker = new Worker(“worker.js”);

使用時

worker.postMessage(num); //worker.postMessageを呼び出す
//内部で引数はEventMessageでラッパされてworkerThread.onmessage が呼び出される
//wokerThread.onmessage(new EventMessage(num));

UIへ反映したい場合
UIへ反映したい場合は、登録するコードの中で、その処理を記載しておく。具体的にはwokerThread.onmessage として登録する処理内でpostMessage を呼び出す。

postMessage(result);
//内部で、引数はEventMessageでラッパされて worker.onmessage が呼び出される
//worker.onmessage(new EventMessage(num));

一部、想像で書いているので間違っているかもしれない。いずれにせよ、API提供側で、workerのpostMessageメソッドと、onmessageメソッドとを、バックグランドで動作するスレッドオブジェクトと結びつけてよろしくやってくれているということを理解してプログラムを作る必要がある。一般的にマルチスレッドプログラミングにおいては、生成したスレッドオブジェクトのライフタイムコントロールは難しいので、onmessageにリソースを離さない変な処理をいれないように気をつける必要があるだろう。

同じタグの記事: HTML5
同じカテゴリの記事: Program