(假设我有 10 个内核)
当我写的时候:
Parallel.For(0, 100, (i,state) =>
{
Console.WriteLine(i);
});
问题:
分配给每个核心的数字量的公式是什么? (是
100/10
吗?)在执行点,每个核心是否已经知道要处理哪些数字?或者它是否每次都从
[0..100]
存储库中消耗一个新数字(让我们暂时忽略 block 或范围)?i
参数 - 它是指0..100
索引还是每个线程中的相对索引及其“将要处理”的数字?
最佳答案
没有记录。可能工作任务从共享工作池中检查工作 block 。可能他们一次取不到 10 个项目,因为取 10 个项目将导致在
Parallel.For
操作快结束时工作的线程少于 10 个。单个慢线程可能会造成顺序瓶颈,因为它可能是唯一仍在运行的线程。最好将工作分成更小的 block ,这样这种类型的瓶颈就会变得更小。我不知道。我很确定必须使用 Reflector 来获取这些信息。
它指的是全局索引,因此您可以使用它来访问共享列表或其他内容。您的工作代表见过的每个
i
都是独一无二的。
关于c# - c# 中的并行和工作划分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13438955/