5

(10個のコアがあるとしましょう)

私が書くとき:

Parallel.For(0, 100, (i,state) =>  
         { 
            Console.WriteLine(i); 
         });

質問:

  1. 各コアに数を割り当てる式は何ですか? (100/10ですか?)

  2. 実行時点で、各コアはどの数値が処理されるかを既に認識していますか? それとも、毎回[0..100]リポジトリから新しい数値を消費しますか (ここではチャンクまたは範囲を無視しましょう)。

  3. iパラメータ - インデックスを参照しています0..100か、それとも各スレッドの相対インデックスであり、その「処理する」番号ですか?

4

1 に答える 1

3
  1. 文書化されていません。おそらくワーカー タスクは、共有作業プールから作業のチャンクをチェックアウトします。10 個の項目を取得すると、操作の終了間際に作業中のスレッドが 10 未満になるため、一度に取得する項目はおそらく 10 未満ですParallel.For。単一の低速スレッドは、まだ実行中の唯一のスレッドである可能性があるため、シーケンシャル ボトルネックを作成する可能性があります。このタイプのボトルネックが小さくなるように、作業を小さなチャンクに分割することをお勧めします。

  2. 知らない。Reflector を使用してこの情報をこじ開ける必要があると確信しています。

  3. グローバルインデックスを参照するため、共有リストなどにアクセスするために使用できます。i作業デリゲートがこれまでに見たものはすべて一意になります。

于 2012-11-18T10:12:05.037 に答える