Tomcat 线程池大小和内核数

Tomcat thread pool size and number of cores

Tomcat 默认创建 25 个线程,默认最多创建 200 个额外线程。

但问题是,cpu核心数很少超过32

也就是说,由于并行处理的数量在32左右,我认为线程池的最大数量是50。

不知道为什么Tomcat把最大线程数设为200

还是分配一个线程排队,有请求进来,即使不能并行处理?如果是这样,那就太奇怪了。为什么要把连执行都执行不了的资源分配给线程呢? (当然,我知道如果线程池中没有线程,就会排队。)

我第一次写多线程程序,是为了 运行 在只有一个 CPU 核心的计算机上。发明线程是为了提供 concurrency, which is a broader topic than parallel processing。对于 Web 服务器而言,如果线程在 blocked 状态下花费大量时间(例如,等待磁盘 CPUs,那么拥有更多的池工作线程可能是有利的=24=].)


the number of cpu cores rarely exceeds 32

我不知道什么是稀有什么不是,但是一些计算机有超过 32 个。IBM 目前最大的大型机可以配置超过 200 个内核.

https://en.wikipedia.org/wiki/IBM_Z

在处理请求的过程中可能会发生各种各样的事情:可以读取文件,可以在远程数据库服务器上执行查询,可以调用远程网络服务,所有这些操作都是上下文切换的机会到另一个线程。

the number of cpu cores rarely exceeds 32. 正如其他人所提到的,线程提供并发性——另一个线程可以在另一个线程处于阻塞状态时执行。如果所有线程都处于活动状态,那么某些线程确实会上下文切换到分配给其核心的另一个线程。但无论如何,这似乎也是一个可配置的参数 - https://www.baeldung.com/java-web-thread-pool-config