c# Environment.ProcessorCount 并不总是返回逻辑处理器的完整数量,为什么?

标签 c# cpu server core hyperthreading

在我的机器上,Windows 7 - 企业版,配备 1 x Intel Xeon E5-1660 0 @ 3.30Ghz(6 核/CPU,超线程已激活),Environment.ProcessorCount 返回 12,这是准确的。

在配备 2 个 Intel Xeon E5-2697 v3 @ 2.60GHz 的 Windows Server 2012 上(14 个内核/cpu,激活了超线程(我认为是因为任务管理器显示:2 个插槽,28 个内核,56 个逻辑处理器)),环境.ProcessorCount 返回 28,这在我们看来是错误的,因为 2x14x2 = 56。

为什么在 Windows Server 2012 上,c# 方法 Environment.ProcessorCount 没有返回正确数量的逻辑处理器?

作为附加信息,环境变量如下: NUMBER_OF_PROCESSORS=28

TaskManager

2015-05-26 更新:

在我的其他问题中有此相关错误的更多详细信息/原因:Unable to use more than one processor group for my threads in a C# app .主要是我认为 C# 确实只使用一个处理器组。奇怪的是,在我们的服务器上,虽然只有 56 个逻辑处理器,但有 2 个处理器组。但是这个HP CUSTOMER ADVISORY解释为什么我们的服务器 bios 配置导致错误的窗口。

最佳答案

文档中可能有提示:

“如果当前机器包含多个处理器组,则此属性返回可供公共(public)语言运行时 (CLR) 使用的逻辑处理器的数量。”

这可能是这里的问题吗?

MSDN Article

发现了一些有趣的东西:

默认情况下,池被限制为单个处理器组 (http://msdn.microsoft.com/en-us/library/windows/desktop/dd405503(v=vs.85).aspx),因此限制为 64 个内核。但是,在 .NET 4.5 中,您可以设置 Thread_UseAllCpuGroups enabled="true"标志。

MSDN Forum Post

关于c# Environment.ProcessorCount 并不总是返回逻辑处理器的完整数量,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27965962/

相关文章:

c# - 将参数从 C# .cs 传递到 .xslt

c# - 如何获得特定的文化货币图案

debugging - 分析 SO 中 Firefox 插件的 CPU 消耗

c - 为什么是 pause() "efficient use of the CPU"?

linux - .NET Core 最佳 Linux 服务器发行版

node.js - 如何让 NodeJs 项目在端口 3000 上可公开访问?

c# - 我如何判断 int[] 是否尚未分配任何内容?

c# - 单元测试中模拟是否需要接口(interface)?

python - 用python浪费cpu周期

python - 在 python 中,如何获取本地服务器的日期和时间?