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 是处理器数量。
我有一个应用程序可能同时使用数百甚至数千个线程,每个线程持续一段固定的时间。
线程池的大小应该是多少? - 这个数字是否有经验法则。我知道使用处理器的数量是一个可取的数字。是要设置的最大数量吗?
对于 CPU 绑定任务,它应该是处理器数量。
int N = Runtime.getRuntime().availableProcessors();
对于 I/O 绑定任务,它可以超过处理器数量,因为在 I/O 密集任务期间可能不会使用某些线程。您应该估计平均 I/O 请求的等待时间比率。获得此比率 RT 后,您可以使用公式 N*(1+RT),其中 N 是处理器数量。