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