4

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

我想要不影响程序性能的最大可能利用率。如何确定要使用的合适线程数?运行以下行后:Runtime.getRuntime().availableProcessors();我得到了 4。我的处理器是 Intel core i7,具有 8 GB RAM。

4

2 回答 2

5

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

根据你等待的时间,你会想要增加这个数字。增加线程数量的代价是您将有更多的上下文切换和资源竞争。好处是您将准备好另一个线程以防万一其他线程决定它必须中断某些事情。

您最好的选择是将其设置为某个值(让我们从 4 开始)并逐步上升。使用每个设置分析您的代码,并查看您的基准是上升还是下降。您应该很快就会看到一个模式和一个盈亏平衡点。

在优化方面,您可以根据您想要的所有关于什么应该是最快的理论化,但是您不会击败实际运行和计时您的代码来真正回答这个问题。

于 2012-07-09T22:16:17.330 回答
2

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

甲骨文网站:

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

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

于 2012-07-09T22:16:38.530 回答