首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Runtime.availableProcessors:它将返回什么?

Runtime.availableProcessors:它将返回什么?
EN

Stack Overflow用户
提问于 2012-02-24 06:28:16
回答 3查看 2.5K关注 0票数 8

Java1.6中的Runtime.availableProcessors()的javadoc是令人愉快的非特定的。它是只看硬件配置,还是也看负载?它是否足够聪明,可以避免被超线程愚弄?它是否通过linux taskset命令尊重有限的处理器集?

我可以添加一个我自己的数据点:在这里有12个核心和超线程的计算机上,Runtime.availableProcessors()确实返回24,这不是一个用来决定尝试运行多少线程的好数字。这台机器显然不是空闲的,所以它也不可能以任何有效的方式查看负载。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-24 07:03:48

AFAIK,它总是为您提供可用CPU的总数,即使那些不可用于调度的CPU也是如此。我有一个库,它使用这个事实来查找保留的cpus。我读取了/proc/cpuinfo和该进程的默认线程亲和性,以确定可用的线程。

票数 1
EN

Stack Overflow用户

发布于 2012-02-24 08:17:25

在Windows上,使用GetSystemInfo,并从返回的SYSTEM_INFO结构中使用dwNumberOfProcessors

这可以从void os::win32::initialize_system_info()int os::active_processor_count()中的os_windows.cpp的OpenJDK源代码中看出。

MSDN文档中的dwNumberOfProcessors表示,它报告“当前组中逻辑处理器的数量”,这意味着超线程将增加报告的CPU数量。

在Linux上,os::active_processor_count()使用sysconf

代码语言:javascript
复制
int os::active_processor_count() {
  // Linux doesn't yet have a (official) notion of processor sets,
  // so just return the number of online processors.
  int online_cpus = ::sysconf(_SC_NPROCESSORS_ONLN);
  assert(online_cpus > 0 && online_cpus <= processor_count(), "sanity check");
  return online_cpus;
}

其中_SC_NPROCESSORS_ONLN文档显示“当前在线(可用)的处理器数量”。这不受进程亲和力的影响,也受超线程的影响。

票数 8
EN

Stack Overflow用户

发布于 2012-02-24 07:10:28

根据Sun Bug 6673124的说法

Runtime.availableProcessors()使用的active_processor_count代码如下:

int os::active_processor_count() { int online_cpus = sysconf(_SC_NPROCESSORS_ONLN);pid_t pid = getpid();psetid_t pset = PS_NONE;//我们是在处理器集中运行吗?if (pset_bind(PS_QUERY,P_PID,pid,&pset) == 0) { if (pset != PS_NONE) { uint_t pset_cpus;//查询处理器集中cpus个数if (pset_info(pset,NULL,&pset_cpus,NULL) == 0) { assert(pset_cpus >0 && pset_cpus <= online_cpus,"sanity check");_processors_online = pset_cpus;返回pset_cpus;} //否则返回在线cpus数返回online_cpus;}

此特定代码可能是特定于Solaris的。但我可以想象,在其他平台上,这种行为至少会有些类似。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9422404

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档