c#中的并行和工作分工?

Roy*_*mir 5 .net c# parallel-processing .net-4.0 task-parallel-library

(假设我有10个核心)

我写的时候:

Parallel.For(0, 100, (i,state) =>  
         { 
            Console.WriteLine(i); 
         });
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 为每个核心分配数量的公式是什么?(是100/10吗?)

  2. 在执行点,每个核心是否已经知道将要处理哪些数字?或者它每次从[0..100]存储库中消耗一个新的数字时消耗(让我们暂时忽略块或范围)?

  3. i参数-它指的是0..100指数还是在每个线程和它的"会处理"的数字相对指数?

usr*_*usr 3

  1. 它没有记录。工作任务可能会从共享工作池中检查工作块。可能它们一次获取的项目少于 10 个,因为获取 10 个项目将导致在操作接近结束时正在工作的线程少于 10 个Parallel.For。单个慢速线程可能会造成顺序瓶颈,因为它可能是唯一仍在运行的线程。最好将工作划分为较小的块,以便此类瓶颈变得更小。

  2. 我不知道。我很确定人们必须使用 Reflector 来撬出这些信息。

  3. 它指的是全局索引,因此您可以使用它来访问共享列表或其他内容。您的工作代表所看到的每一个都i将是独一无二的。