using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace ParallelTestProjects
{
class Program
{
static void Main(string[] args) {
Action<long> con;
con = WriteNumericConsole;
Parallel.For(0, 100, con);
Console.Write("Please put any key. : ");
Console.ReadLine();
}
public static void WriteNumericConsole(long i) {
Console.WriteLine(i);
return;
}
}
}
Viertual PC上のVisual Studio 2010で上のようなコードを実行させると、0から100の数字がばらばらに表示されるといったこれぞパラレルという感じの実行結果になりませんね。この辺はVirtual PCの特徴の一つなのでどうしようもないところだったりします。Hyper-Vで論理CPUを複数設定できる様な環境であればうまくいくのかもなぁ。
コメント
Console.WriteLineはシリアライズされていて&かつ負荷が0に近いのでスイッチも発生せずという所ではないでしょうか。
また、負荷が低いってのはまた難点で、スレッドの起動コストより処理コストが軽いと、起動されたスレッドの次のスレッドを起こす前に前のスレッドが終わってという形で結果はシーケンシャルになります。
System.Threading.Thread.CurrentThread.ManagedThreadId を一緒に表示してみると実スレッドが何か分かりやすいと思いますよ。
System.Threading.Thread.CurrentThread.ManagedThreadId < 存在を忘れてました。。
ネイティブ環境でVS2008にParallel Ext.を入れた環境だと比較的綺麗に並列化されていたので、VPCで綺麗に番号順に並んだ時はあれ?って感じでした。エミュレーションで、仮想CPUが1に固定されるVPC環境である以上仕方ないですね。