首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查和控制实际并行运行的应用程序线程数

检查和控制实际并行运行的应用程序线程数
EN

Stack Overflow用户
提问于 2014-02-11 03:50:48
回答 1查看 61关注 0票数 0

假设我拥有生成和启动N个线程的Java应用程序。我在Linux或Windows机器上运行它,它有4个核心。我会假设,如果我的应用程序创建了一堆线程,那么在任何时候都有4个线程(或者如果内核使用超线程的话)。同时被处决。

  1. 有什么办法检查/核实吗?我知道在Java中您可以打印Runtime.getRuntime().getAvailableProcesses(),但是这个数字总是意味着并行运行的线程数吗?我应该更喜欢查看一些操作系统设置吗?
  2. 这种并行性是否有可能被OS或某些JVM设置所限制?(就像说,即使您可以同时运行X任务,您的应用程序将被限制为只有X/2)。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-11 11:38:17

例如,看看Windows TaskManager (其他OSes将有类似的工具)。它回答了这两个问题:您可以告诉它显示每个单独核心的CPU负载,这样您就可以看到并行运行了多少。您可以右键单击一个进程,并告诉操作系统限制该进程的核心使用。请注意,在我的计算机上,使用Windows 7和Java 7u 40时,Runtime.availableProcessors()方法立即反映了当我使用TaskManager更改处理器数量时的变化。

但是,即使允许一个进程使用所有核心(默认),如果另一个进程同时使用一个或多个核心,它也可能使用较少的内核。这是多项任务。这是没有解决办法的,因为每一次获得可用核的真实数量的尝试都会被这样一个事实所淘汰,那就是这个数字可以在下一个纳秒内改变。

没有必要让你的软件过于复杂。如果您使用与Runtime.availableProcessors()报告的内核数量相匹配的线程数(更多的线程不受伤害),那么您已经尽了最大的努力来支持使用所有内核。如果您的应用程序不能使用所有内核,那么这并不重要,因为更多线程的开销是可以忽略不计的。我们不是在谈论成千上万的线程…

只是使用得太少,可能会使资源闲置。

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

https://stackoverflow.com/questions/21692732

复制
相关文章

相似问题

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