【问题标题】:How to get maximum degree of parallelism for task parallel library usage?如何获得任务并行库使用的最大并行度?
【发布时间】:2014-02-03 05:01:49
【问题描述】:

我想使用 Parallel.invoke。如果我分配 20 个并行任务,那么只有 8 个并行运行。我的 CPU 是http://ark.intel.com/products/47925,报告的线程数是 8。我假设可以并行运行的任务数与 cpu 线程数有关。我不想创建比线程数更多的任务。我如何知道c#中的线程数?我尝试查询 ParallelOptions.MaxDegreeOfParallelism,我得到的只是 -1。

【问题讨论】:

标签: c# multithreading parallel-processing task-parallel-library


【解决方案1】:

并行任务基本上是可以共享的线程。因为活动线程的数量受到可用逻辑处理器内核数量的限制,所以最好只取程序可用的逻辑内核数量。

Environment.ProcessorCount

【讨论】:

  • 你是对的。该查询给了我与线程数相同的数字。在不同的处理器上试过。但我很困惑。恕我直言,正确的处理器数量应该是 1(我有 1 个处理器)。核心数应为 4(我的处理器有 4 个核心)。 8 是线程数。
  • 处理器、内核和逻辑内核不同。 Environment.ProcessorCount 包含逻辑核心数。
  • 我认为微软是搞砸了这个词的人。在 tpl 中,逻辑核心被定义为线程,而在 system.environment 中,逻辑核心被定义为处理器。
  • @publicENEMY 逻辑内核和线程非常不同。您的应用程序中可以有许多线程(远多于内核数),但在任何给定时间,所有应用程序的运行线程总数受逻辑处理器数量的限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-14
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多