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

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

最佳答案

对于受CPU约束的任务,它应该是处理器数量。

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


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

关于java - 固定池的Java Executors服务,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46131061/

10-10 06:01