假设我拥有生成和启动N个线程的Java应用程序。我在Linux或Windows机器上运行它,它有4个核心。我会假设,如果我的应用程序创建了一堆线程,那么在任何时候都有4个线程(或者如果内核使用超线程的话)。同时被处决。
Runtime.getRuntime().getAvailableProcesses(),但是这个数字总是意味着并行运行的线程数吗?我应该更喜欢查看一些操作系统设置吗?发布于 2014-02-11 11:38:17
例如,看看Windows TaskManager (其他OSes将有类似的工具)。它回答了这两个问题:您可以告诉它显示每个单独核心的CPU负载,这样您就可以看到并行运行了多少。您可以右键单击一个进程,并告诉操作系统限制该进程的核心使用。请注意,在我的计算机上,使用Windows 7和Java 7u 40时,Runtime.availableProcessors()方法立即反映了当我使用TaskManager更改处理器数量时的变化。
但是,即使允许一个进程使用所有核心(默认),如果另一个进程同时使用一个或多个核心,它也可能使用较少的内核。这是多项任务。这是没有解决办法的,因为每一次获得可用核的真实数量的尝试都会被这样一个事实所淘汰,那就是这个数字可以在下一个纳秒内改变。
没有必要让你的软件过于复杂。如果您使用与Runtime.availableProcessors()报告的内核数量相匹配的线程数(更多的线程不受伤害),那么您已经尽了最大的努力来支持使用所有内核。如果您的应用程序不能使用所有内核,那么这并不重要,因为更多线程的开销是可以忽略不计的。我们不是在谈论成千上万的线程…
只是使用得太少,可能会使资源闲置。
https://stackoverflow.com/questions/21692732
复制相似问题