核心线程数的设置

1、不同种类的线程池都适用什么场景呢?

2、选择的关键点是:1 尽量减少线程切换和管理的开支,2最大化利用cpu

3、并发比较高,耗时比较短的任务

  • 这种场景适合线程尽量少,因为如果线程太多,任务执行时间段很快就执行完了,有可能出现线程切换和管理多耗费的时间,大于任务执行的时间,这样效率就低了。线程池线程数可以设置为CPU核数+1

4、并发比较低,耗时比较长的任务

  • a) IO密集型:假如是业务时间长集中在IO操作上,也就是IO密集型的任务,因为IO操作并不占用CPU,所以可以加大线程池中的线程数目,这样一个io任务可能会执行很长时间,所以在执行io操作时它的cpu可以让出来去执行别的任务,让CPU处理更多的业务。线程池线程数可以设置为CPU核数*2
  • b) 计算密集型: 假如是业务时间长集中在计算操作上,也就是计算密集型任务,这个操作也需要使用cpu的,如果线程太多并且每个任务又特别耗时不但会影响其他业务,严重时还会导致cpu飙升100%,所以线程数不宜太多

5、并发高,耗时长的任务

  • 解决这种类型任务的关键不在于线程池而在于整体架构的设计
  • 首先第一步:看看这些业务里面某些数据是否能做缓存
  • 第二步:看看能否把这些高并发,耗时长的任务能不能拆分成。高并发,低耗时,或者低并发,高耗时的场景
  • 第三步:增加服务器数量,增加计算单元。

你可能感兴趣的:(多线程,线程池)