「そうめん」再履修(5) -ふたつの Executor-
2008/12/09 20:39 - AS3.0
今まで数回にわたって、「そうめん」で擬似マルチスレッドが実行される様子を見てきました。
擬似マルチスレッドはスレッドクラスの実行関数を最小処理単位として切り替わり、もし run() がループするようなスレッドクラスならそれ相応のコード記述をする必要があるということを確認しました。
ParallelExecutor
ところで、ParallelExecutor というクラスがあります。
addThread()メソッドで登録した複数のスレッドを並行処理させるというものです。 使用する際は下記のような記述をおこないます。
このクラスの挙動ですが、下記のような記述で普通に擬似マルチスレッドを実行させたときと、特に変わりがないように思えます。
join() で処理待ちをしなかったときは若干異なるようですが、基本的に ParallelExecutor を使っても使わなくてもマルチスレッドの挙動は同じって考えて良いんですかね(考えて良いらしい。前回の yossy さんのコメント参照)。
まぁでも join() を記述する際、ParallelExecutor を使わない場合は SubThreadA、B、C のうちどれが一番処理工程が長いのかということをコーダが意識しなければいけない、でもParallelExecutor を使えばそんなことに煩わされない。 この違いは大きいですよね。
あと、進捗状況取得は ParallelExecutor が必須か。
SerialExecutor
ParallelExecutor の話が出たので、ここで対になるもうひとつの Executor である SerialExecutor についても見てみましょう。
これは、普通だったらマルチスレッドで動いてしまう複数のスレッドを、シングルスレッドとして順次実行したい場合に使用するクラスです。
記述方法は ParallelExecutor とまったく同じで以下のような感じ。
実行結果は以下のとおり(各 SubThread は前回と同じものを使用)。
main f1 A f1 A f2 A f3 A f4 A finalize B f1 B f2 B f3 B f4 B f5 B f6 B finalize C f1 C f2 C finalize main f2 D f1 E f1 main finalize D f2 E f2 D f3 E f3 D finalize E f4 E f5 E finalize
SubThreadA、B、C がそれぞれシングルスレッドとして処理されているのが分かるかと思います。
続く。