multithreading - Runtime.getRuntime().availableProcessors() 不返回可用内核

标签 multithreading jvm cpu core

我们有一台配备 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/

相关文章:

Javamail 多线程多收信

java - 如何阻止另一个 Java 线程?

linux - Linux 中的 pthread 概念

java - JVM中操作数栈的作用是什么?

java - 如何用 Java 编写正确的微基准测试?

go - 为什么在Golang中将1.0/3.0数字文字三倍相加得出恰好为1?

java - 有界队列的线程池

java - mvn 测试 java.lang.OutOfMemoryError : unable to create new native thread

performance - 当前 CPU 的成本更高 : arithmetic operations or conditionals?

python - 在 python 中访问 CPU 温度