线程池应该设置多少才合理

我们常常会问多线程相关知识,那么线程池的设置问题就避免不了,那么,我们应该怎么回答或者怎么思考解决这个问题呢?

其实这个问题反映的是如何设置使得计算机资源利用率最大化。
我们回答的时候可以说:
为了提高 CPU 的利用率,一般我们可以设置线程池的为CPU核心数或者核心数的2倍。
线程池的理想大小 取决于提交任务的类型以及所部署系统的特性,不应该在程序中写死,
线程等待时间所占比例越高,需要越多线程。线程CPU时间所占比例越高,需要越少线程

我们要根据任务是 :计算密集型 or I/O密集型 来设置线程池的大小。
计算密集型是指处理这种任务时,线程不会发生阻塞,线程不阻塞就一定程度代表 CPU 一直在忙碌;
I/O 密集型 是指运行该类任务时线程多会发生阻塞,一旦阻塞,CPU 就多被闲置,浪费 CPU 资源。

通俗的说:

  • 一些进程绝大多数时间在计算上,称为计算密集型(CPU密集型)computer-bound。

  • 而有一些进程则在input 和output上花费了大多时间,称为I/O密集型,I/O-bound。比如搜索引擎蜘蛛大多时间是在等待相应这种就属于I/O密集型。

当是i/o密集性时,等待时间更长,需要线程数就更多,所以我们可以设置为2倍,
而计算机密集型,执行速度很快,但是不停的执行,基本上CPU都是满负荷运行,那么核心数即线程数就更为合适。

计算公式可以参考书籍:《Java 并发编程实战》

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值