2012-02-23 19 views
1

並行して実行されているタスクの数に関して、並行してタスクのパフォーマンスをチェックするためのサンプルプログラムを作成しました。並行タスク数

ほとんどの仮定: 操作はスレッドに依存しないため、スレッド間の同期メカニズムは不可欠です。

アイデアは、それがに効率的であるかどうか、チェックすることです: または 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軸は、セマフォ・スロットの数は(を参照 enter image description here

あります上記のプログラム)

本質的に傾向は次のとおりです。並列タスクの数が多いほど良い。今私の質問はどのような条件にありますか:

より多くの並列タスク=それほど最適ではありませんか?

条件は次のとおりです。 タスクは相互依存しており、特定のリソースが利用可能になるまで待つ必要があります。

どのようなシナリオでも並列タスクの数は制限されていますか?

答えて

2

TPLは、スレッドが同時に実行されている回数を制御します。基本的には、これらのスレッドで実行されるタスクをキューに入れるだけです。 実際にはではないこれらのすべてのタスクを並行して実行しています。

TPLは、すべてをできるだけ効率的にするために、盗難待ち行列を使用します。 が必要なタスクに関するすべての情報がある場合は、自分でマイクロ管理するのではなく、すべてのタスクをキューに入れることもできます。もちろん、これにはメモリが必要です。膨大な数のタスクがある場合は、になる可能性があります。

私は人工的にあなたの論理的な仕事をちょっと分けて、より多くの仕事を手に入れようとはしません。一般的なルールとして "more tasks == better"を表示しないでください。

(私はあなたの方法で、あなたの測定でコンソールにラインのたくさんを書くのに要する時間を含めていることに注意してください、私はそれらのConsole.WriteLine呼び出しを削除して、もう一度試してみた - 。彼らはよく大きなを行うことができます差異)

関連する問題