如何决定应用程序的线程数?

How to decide on number of threads for an application?

我读到每个核心可以有两个线程。那么,如果我在产品中的应用程序使用三个八核服务器,是否意味着我的应用程序只能处理 48 个并发请求?还是我在这里混合了两种不同的东西?

如有任何说明,将不胜感激。

在 Java 中,您可以拥有任意数量的线程,并且不受拥有的 CPU 内核数量的限制。 IE。即使您只有一个单核处理器,您仍然可以编写多线程应用程序。

JVM 将执行上下文切换 - 它会执行线程 1 一段时间,然后执行线程 2 一段时间,然后可能再次执行线程 1,依此类推,在线程之间切换。这些线程之间的切换可以在几毫秒后发生,因此它可以给人一种线程正在 运行 并行的错觉。

在某些应用程序中,仅使用单个线程会更快 - 因为这种上下文切换过程只会增加额外的开销。

前几天我确实写了一个小的多线程应用程序。它有大约 30 个线程,在这个用例中,多线程确实提高了应用程序的效率。

我有大约 30 个 URL 需要点击并从中检索一些数据。如果我在单个线程中执行此操作,则每次发出请求并等待响应时都会有等待时间(因此会阻塞应用程序)。当多线程时,其他线程将能够 运行 等待继续进行。

我希望这是有道理的。值得一读 Java 上下文切换以获取更多信息。

这是关于该主题的一个很好的来源:https://docs.oracle.com/javase/tutorial/essential/concurrency/index.html