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# - C# OpenFileDialog 中的 Stackoverflow/CLR 错误

c# - 如何使用 c# 在 Google api 中根据时间检索电子邮件?

c# - EPPlus 中的自动列宽

c# - 如果计算机在保留内存映射文件时挂起,会发生什么情况?

.net-4.0 - 使用Entity Framework 4.0读取CSV文件

c# - 无法在 MonoDevelop 中打开 ASP.NET MVC 3 解决方案的测试项目

c# - Silverlight Deepzoom API 输出与 Deepzoom Composer 输出

c# - 从 FileSystemWatcher 错误中恢复的最佳做法是什么?

.net - .NET 中哪种退出方法最好用?

linux - Linux 上用于 Dotnet4 服务的 mono-service2