java线程池大小分配方案

Posted 植物大戰僵尸

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java线程池大小分配方案相关的知识,希望对你有一定的参考价值。

任务一般可分为:CPU密集型、IO密集型、混合型,对于不同类型的任务需要分配不同大小的线程池。

CPU密集型任务(计算密集型的程序)
尽量使用较小的线程池,一般为CPU核心数+1。
因为CPU密集型任务使得CPU使用率很高,若开过多的线程数,只能增加上下文切换的次数,因此会带来额外的开销。
(即使当计算密集型的线程偶尔由于缺失故障或者其他原因而暂停时,这个额外的线程也能确保CPU的时钟周期不会被浪费。)

IO密集型任务
可以使用稍大的线程池,一般为2*CPU核心数。
IO密集型任务CPU使用率并不高,因此可以让CPU在等待IO的时候去处理别的任务,充分利用CPU时间。

混合型任务
可以将任务分成IO密集型和CPU密集型任务,然后分别用不同的线程池去处理。
只要分完之后两个任务的执行时间相差不大,那么就会比串行执行来的高效。
因为如果划分之后两个任务执行时间相差甚远,那么先执行完的任务就要等后执行完的任务,最终的时间仍然取决于后执行完的任务, 而且还要加上任务拆分与合并的开销,得不偿失。

参考:https://blog.csdn.net/u013161431/article/details/78750562











以上是关于java线程池大小分配方案的主要内容,如果未能解决你的问题,请参考以下文章

Java_线程池

java应用中可以有多少 线程池

探索JAVA并发 - 线程池详解

nodejs线程池能分配多少线程

Java 线程池

java线程池