gpt4 book ai didi

java - 当我执行多个优于 Runtime.getRuntime().availableProcessors()) 的并行线程时,为什么我的 Java 程序运行得更快?

转载 作者:太空宇宙 更新时间:2023-11-04 06:11:49 77 4
gpt4 key购买 nike

我对如何在 Java 中执行并行线程进行了一些研究。我找到了一个简单的解决方案,那就是使用 ExecutorService 类。它基本上是通过调用以下内容来使用的:

ExecutorService es = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());

每个线程执行一个简单的任务,例如System.out.println()

有人告诉我,Runtime.getRuntime().availableProcessors() 返回处理器的数量,这基本上是能够运行代码的执行引擎的数量、物理上不同的处理器或逻辑处理器(如果使用超线程)。

但是,当我使用以下行时:

ExecutorService es = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors()*2);

我的程序实际上运行得快了很多(尽管我没有计算出确切的运行时间,只是观察速度的明显变化)。

这怎么可能?另外,如果我将这个数字乘以三,它的速度会更快,即使速度随着更高的因子而停止增加。

我的电脑是运行 Yosemite 的 MacBook Pro,配备 2.2 GHz Intel Core i7 处理器。

最佳答案

简单的任务(调用System.out.println())涉及与外界交互,并且它可能会被阻塞,等待(例如)显示设备或磁盘响应。

任务还可能与其他任务同步,并且可能必须等待另一个线程上的 Activity 才能执行某些操作,或者等待共享变量的更新。

“线程数 ~= 核心数”规则只是一个经验法则。只有当线程真正相互独立且独立于外部影响时,它才具有预测性。对于现实世界的多线程应用程序,如果您的目标是最大限度地提高性能,则需要调整应用程序、平台和问题的线程数。

关于java - 当我执行多个优于 Runtime.getRuntime().availableProcessors()) 的并行线程时,为什么我的 Java 程序运行得更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28618575/

77 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com