目前我正在开发一个可以在多线程模式下工作的应用程序。作为在我的本地计算机(Intel Core I5)上测试的一部分,我使用 4 个线程进行了测试。但现在想要发布代码进行密集(回归)测试,因此我们可以通过任何硬性规则来决定要创建用于处理的线程数。
我没有使用任何网络或应用程序服务器,而是编写了逻辑来接收请求然后处理它。现在,在处理过程中,我在主线程上收到请求,然后将调用提交给 ExecuterService,其中我需要决定线程数,然后我处理请求,每个线程再次能够执行返回响应。
我需要配置最佳线程数。我正在尝试在 16 核、40GB 内存的 Linux 机器上部署我的应用程序。
谢谢
最佳答案
应用程序的最大线程数无法通过一些明确定义的公式来提取,但它取决于各种任务的性质和目标环境。
如果您的任务是 CPU 密集型任务,那么如果生成太多线程,性能将会下降,因为大部分时间都花在上下文切换上。
对于计算密集型任务,通用公式是Ncpus+1
。您可以使用Runtime.availableProcessors
确定 CPU 数量如果您的任务是 I/O 密集型,那么大多数时候您可以使用更多数量的线程,因为由于线程在阻塞任务上花费了大量时间,因此所有线程将是可安排的。
因此,考虑到这两个因素,您应该通过分析器或其他类似工具来估计计算时间与等待时间
。
您可以尝试各种尺寸的基准,直到估计出最适合您的情况的尺寸。
关于java - 线程池中要创建多少个线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7824748/