在Java中,是否有一种编程方式可以找出CPU支持多少并发线程?
更新
为了澄清,我不是试图用线程来锤击CPU,而是我知道Runtime.getRuntime().availableProcessors()函数,它提供了我正在寻找的部分信息.
我想知道是否有办法自动调整线程池的大小,以便:
pip*_*eek 19
单个非超线程CPU核心总是可以运行一个线程.您可以生成许多线程,CPU将在它们之间切换.
最佳数量取决于任务.如果这是一项需要大量CPU资源且不需要任何I/O(如计算pi,素数等)的任务,那么每个CPU的1个线程可能是最好的.如果任务更多I/O绑定.比如从磁盘处理信息,那么每个CPU有多个线程可能会获得更好的性能.在这种情况下,磁盘访问可以在CPU处理来自先前磁盘读取的信息时进行.
我建议你做一些测试,测试你的情况下的性能如何随每个CPU核心的线程数量而变化,并根据它来决定.然后,当您的应用程序运行时,它可以检查availableProcessors()并确定它应该生成多少个线程.超线程将使单核看起来像操作系统和所有应用程序,包括availableProcessors()2个CPU,因此如果您的应用程序可以使用超线程,您将获得好处.如果没有,那么性能会受到轻微影响,但可能还不足以为此付出额外的努力.
CPU 通常不会对线程数量造成限制,而且我认为 Java 本身对其生成的本机(内核)线程数量也没有限制。
Runtime 类中有一个方法availableProcessors() 。这就是您要找的吗?
| 归档时间: |
|
| 查看次数: |
29317 次 |
| 最近记录: |