ただし、メインスレッドではdocumentエレメントなどのDOMにアクセスできますが、サブスレッド側からはDOMにはアクセスできません。アクセスしようとするとエラーになります。他にもActiveXObjectなどが使えないなど、サブスレッド側には色々な制約があります。
そのため、サブスレッド側でできることは非常に限られていて、使いどころがあまりないです。。
しかし、ふと思ったのですが「様々な機能をそぎ落として基本的なことしかできないようになっているスレッドは、メインスレッドより高速な処理が可能なのでは?」とデメリットがメリットに転じる可能性を検証したくなりました。
2016/11/02 追記。こちらの記事でメインスレッドの方が37%高速という結果がでました。
検証用ソースは以下
なるべくメインスレッドとサブスレッドの処理内容が等しくなるように、サブスレッド側でも表示更新っぽい処理を行っています。実際にはオブジェクトのプロパティに値を入れているだけですが。
実行結果
2016/11/01訂正。ほんの少しだけWorkerスレッドの方が最大タイムが短いので、速いようです。
あと最大と最小の振れ幅が大きいのも気になります。。
ちなみに実行直後はこんな感じです。
30~50ぐらいで急激に平均タイムが下がり始めます。
CPU使用率も、プログラムの起動直後はやや高くなるのですが
平均タイムが下がり始めるとCPU使用率も下がり
最終的に、プログラムは動き続けているにも関わらず、CPU使用率は起動前とほとんど同じ状態になります。
沢山繰り返すと最適化される?のでしょうか。。
0 件のコメント:
コメントを投稿