繁体   English   中英

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

[英]How to decide the suitable number of threads to create in java?

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

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

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

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

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

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

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

来自oracle网站:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM