2017-09-09 27 views
0

我有一个应用程序可能会同时使用数百个甚至数千个线程,每个线程需要一段固定的时间。针对固定池的Java执行程序服务

什么应该是线程池的大小? - 这个数字是否有一个经验公式?我明白使用处理器的数量是一个可取的数字。这是设置的最大数量吗?

+1

这真的取决于任务和瓶颈。如果进程是CPU限制的,那么答案是“是”。如果涉及IO,答案是“取决于”。 –

+0

https://stackoverflow.com/questions/1980832/java-how-to-scale-threads-according-to-cpu-cores/36723383#36723383 –

回答

1

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

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

对于I/O绑定任务它可以比处理器的数量比较多,因为某些线程可能不会在I/O密集型任务被利用。您应该估计平均I/O请求的等待时间比率。一旦你得到这个比率RT,你可以使用公式N *(1 + RT),其中N是处理器的数量。

相关问题