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

Jur*_*y A 5 java multithreading

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

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

cor*_*iKa 8

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

根据您等待的时间,您可能需要增加等待时间。增加线程数量的代价是您将有更多的上下文切换和资源竞争。这样做的好处是,您将有另一个线程准备好工作,以防其他线程之一决定它必须因某些原因而中断。

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

当谈到优化时,您可以从理论上推测什么应该是最快的,但您不会击败实际运行和计时代码来真正回答这个问题。