Java 固定池的执行程序服务

Java Executors Service for a fixed pool

我有一个应用程序可能同时使用数百甚至数千个线程,每个线程持续一段固定的时间。

线程池的大小应该是多少? - 这个数字是否有经验法则。我知道使用处理器的数量是一个可取的数字。是要设置的最大数量吗?

对于 CPU 绑定任务,它应该是处理器数量。

int N = Runtime.getRuntime().availableProcessors();

对于 I/O 绑定任务,它可以超过处理器数量,因为在 I/O 密集任务期间可能不会使用某些线程。您应该估计平均 I/O 请求的等待时间比率。获得此比率 RT 后,您可以使用公式 N*(1+RT),其中 N 是处理器数量。