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 回答