java - 线程池中要创建多少个线程

标签 java multithreading

目前我正在开发一个可以在多线程模式下工作的应用程序。作为在我的本地计算机(Intel Core I5)上测试的一部分,我使用 4 个线程进行了测试。但现在想要发布代码进行密集(回归)测试,因此我们可以通过任何硬性规则来决定要创建用于处理的线程数。

我没有使用任何网络或应用程序服务器,而是编写了逻辑来接收请求然后处理它。现在,在处理过程中,我在主线程上收到请求,然后将调用提交给 ExecuterService,其中我需要决定线程数,然后我处理请求,每个线程再次能够执行返回响应。

我需要配置最佳线程数。我正在尝试在 16 核、40GB 内存的 Linux 机器上部署我的应用程序。

谢谢

最佳答案

应用程序的最大线程数无法通过一些明确定义的公式来提取,但它取决于各种任务的性质和目标环境。

  • 如果您的任务是 CPU 密集型任务,那么如果生成太多线程,性能将会下降,因为大部分时间都花在上下文切换上。
    对于计算密集型任务,通用公式是Ncpus+1。您可以使用 Runtime.availableProcessors 确定 CPU 数量

  • 如果您的任务是 I/O 密集型,那么大多数时候您可以使用更多数量的线程,因为由于线程在阻塞任务上花费了大量时间,因此所有线程将是可安排的。

因此,考虑到这两个因素,您应该通过分析器或其他类似工具来估计计算时间与等待时间

您可以尝试各种尺寸的基准,直到估计出最适合您的情况的尺寸。

关于java - 线程池中要创建多少个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7824748/

相关文章:

java - 谷歌地图不会显示

java - “warm up”线程究竟是多线程处理?

c# - 线程安全事件 - 这是 "clean"方式吗?

java - Autowiring bean 在线程位置为空

java - 作为 sudo : Unable to open DISPLAY 运行 javafx jar

Java BigDecimal 行为

java - 安卓定位问题

java - 文本上的 JTextArea 和 JTextField 内部填充

ios - UIViewController 元素(通过 IB 在 Main.storyboard 中创建)究竟何时启动/加载?

java - 如何使对数组的写入对其他线程可见