我们有一台配备 4 个 Intel Xeon E7 4850 处理器(NUMA 节点)的高端服务器机器,每个处理器有 10 个内核和 2 个线程。所以实际上我们有 80 个核心一台机器。 (windows任务管理器显示80核) 现在我的问题是我什么时候执行 Runtime.getRuntime().availableProcessors() 它返回 40,所以我的应用程序只生成 40 个线程。 为什么会这样?
最佳答案
除非您使用的 Windows 2003 有一个错误:“在 Windows Server 2003 中错误地报告了支持超线程的物理处理器的数量或物理多核处理器的数量”...
...如果启用了超线程,“40 核”的计数是错误的结果,这似乎是因为 Windows 报告了正确的逻辑 CPU 核数。
如果 Java 修复不可用,那么您可以使用 JNI 来 call the GetLogicalProcessorInformation() Windows API call (包括源代码,适用于 XP SP3 及更新版本)。
关于multithreading - Runtime.getRuntime().availableProcessors() 不返回可用内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12210778/