如何确定在java中创建的合适线程数?

时间:2012-07-09 22:07:53

标签: java multithreading

我有一个java应用程序,可以使用远程主机创建SSL套接字。我想使用线程来加速这个过程。

我希望最大可能的利用率不会影响程序性能。如何确定要使用的合适线程数?运行以下行后:Runtime.getRuntime().availableProcessors();我得到4.我的处理器是英特尔酷睿i7,内存为8 GB。

2 个答案:

答案 0 :(得分:3)

如果你有4个内核,那么理论上你应该在任何给定的时间内准确地有四个工作线程进行最大程度的优化。不幸的是,理论上发生的事情在实践中从未发您可能有工作线程,无论出于何种原因,他们都有大量的停机时间。也许他们正在网上寻找更多数据,或从磁盘读取,其中大部分只是等待而不是使用cpu。

根据你正在做多少等待,你会想要提高数字。增加线程数的成本是您将有更多的上下文切换和资源竞争。好处是你将有另一个线程准备工作,以防其中一个线程决定它必须中断某些东西。

你最好的选择是将它设置为某种东西(让我们从4开始)然后继续前进。使用每个设置配置代码,并查看基准测试是否上升或下降。你很快就会看到一个模式和一个收支平衡点。

在优化方面,您可以将所有想要的内容理论化为最快的,但是您不会打败实际运行并对代码进行计时以真正回答这个问题。

答案 1 :(得分:1)

正如DarthVader所说,你可以使用ThreadPool(CachedThreadPool)。使用此构造,您不必指定具体数量的线程。

来自oracle网站:

  • newCachedThreadPool方法使用可扩展线程池创建执行程序。此执行程序适用于启动许多短期任务的应用程序。

也许这就是你要找的东西。 关于核心数量很难说。您有4个超线程核心,至少应该为您的操作系统留出一个核心。我会说4-6线程。