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

标签 c# .net .net-4.0 parallel-processing task-parallel-library

(假设我有 10 个内核)

当我写的时候:

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

问题:

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

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

  3. i 参数 - 它是指 0..100 索引还是每个线程中的相对索引及其“将要处理”的数字?

最佳答案

  1. 没有记录。可能工作任务从共享工作池中检查工作 block 。可能他们一次取不到 10 个项目,因为取 10 个项目将导致在 Parallel.For 操作快结束时工作的线程少于 10 个。单个慢线程可能会造成顺序瓶颈,因为它可能是唯一仍在运行的线程。最好将工作分成更小的 block ,这样这种类型的瓶颈就会变得更小。

  2. 我不知道。我很确定必须使用 Reflector 来获取这些信息。

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

关于c# - c# 中的并行和工作划分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13438955/

相关文章:

c# - 远程机器中的日期文化问题

asp.net mvc 应用程序中的 C# 编码风格

c# - slider 绑定(bind)导致性能显着下降

.net - 在哪里可以找到 4.0 的 TPL 数据流版本?

c# - 在根中插入证书(带有私钥),.NET 4 中的本地计算机证书存储失败

c# - 将List中的值导出到excel

c# - Windows XP 上的 XamlParseException

c# - 如何打破存储库之间的循环依赖

c# - iOS 和 .NET WebAPI 之间的数据压缩

.net-3.5 - .NET 3.5 SP1 先决条件,MS 为客户端提供 4.0