700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > java io密集型任务_IO密集型的线程池大小设置

java io密集型任务_IO密集型的线程池大小设置

时间:2023-09-15 21:02:14

相关推荐

java io密集型任务_IO密集型的线程池大小设置

类型判断(CPU密集orIO密集or混合型)

看应用是CPU密集型的还是IO密集型的,还是混合型的。

CPU密集 CPU密集型的话,一般配置CPU处理器个数+/-1个线程,所谓CPU密集型就是指系统大部分时间是在做程序正常的计算任务,例如数字运算、赋值、分配内存、内存拷贝、循环、查找、排序等,这些处理都需要CPU来完成。

IO密集 IO密集型的话,是指系统大部分时间在跟I/O交互,而这个时间线程不会占用CPU来处理,即在这个时间范围内,可以由其他线程来使用CPU,因而可以多配置一些线程。

混合型 混合型的话,是指两者都占有一定的时间。

IO密集型线程大小

/**

* Support class for thread pool size

*

* @author Nadeem Mohammad

*

*/

public final class ThreadPoolUtil {

private ThreadPoolUtil() {

}

/**

* Each tasks blocks 90% of the time, and works only 10% of its

*lifetime. That is, I/O intensive pool

* @return io intesive Thread pool size

*/

public static int ioIntesivePoolSize() {

double blockingCoefficient = 0.9;

return poolSize(blockingCoefficient);

}

/**

*

* Number of threads = Number of Available Cores / (1 - Blocking

* Coefficient) where the blocking coefficient is between 0 and 1.

*

* A computation-intensive task has a blocking coefficient of 0, whereas an

* IO-intensive task has a value close to 1,

* so we don't have to worry about the value reaching 1.

* @param blockingCoefficient the coefficient

* @return Thread pool size

*/

public static int poolSize(double blockingCoefficient) {

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

int poolSize = (int) (numberOfCores / (1 - blockingCoefficient));

return poolSize;

}

}

使用

ExecutorService executorService = Executors.newFixedThreadPool(ThreadPoolUtil.ioIntesivePoolSize());

这样语义化设置,表达能力强一些。

doc

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。