並行して実行されているタスクの数に関して、並行してタスクのパフォーマンスをチェックするためのサンプルプログラムを作成しました。並行タスク数
ほとんどの仮定: 操作はスレッドに依存しないため、スレッド間の同期メカニズムは不可欠です。
アイデアは、それがに効率的であるかどうか、チェックすることです: または 2.できるだけ多くのタスクを並列にタスクの数を制限し、残りのタスクを産卵前に完了するいくつかのタスクを待つよう 1.Spawn 。
後のプログラムである:ここ
static void Main(string[] args)
{
System.IO.StreamWriter writer = new System.IO.StreamWriter("C:\\TimeLogV2.csv");
SemaphoreSlim availableSlots;
for (int slots = 10; slots <= 20000; slots += 10)
{
availableSlots = new SemaphoreSlim(slots, slots);
int maxTasks;
CountdownEvent countDownEvent;
Stopwatch watch = new Stopwatch();
watch.Start();
maxTasks = 20000;
countDownEvent = new CountdownEvent(maxTasks);
for (int i = 0; i < maxTasks; i++)
{
Console.WriteLine(i);
Task task = new Task(() => Thread.Sleep(50));
task.ContinueWith((t) =>
{
availableSlots.Release();
countDownEvent.Signal();
}
);
availableSlots.Wait();
task.Start();
}
countDownEvent.Wait();
watch.Stop();
writer.WriteLine("{0},{1}", slots, watch.ElapsedMilliseconds);
Console.WriteLine("{0}:{1}", slots, watch.ElapsedMilliseconds);
}
writer.Flush();
writer.Close();
}
の結果である:Y軸はミリ秒単位で時間取られ、X軸は、セマフォ・スロットの数は(を参照
あります上記のプログラム)
本質的に傾向は次のとおりです。並列タスクの数が多いほど良い。今私の質問はどのような条件にありますか:
より多くの並列タスク=それほど最適ではありませんか?
条件は次のとおりです。 タスクは相互依存しており、特定のリソースが利用可能になるまで待つ必要があります。
どのようなシナリオでも並列タスクの数は制限されていますか?