短视频
来源:短视频
面试的时候被问到:线程池的参数如何设置, 你知道面试官最想听到的是什么吗?那我今天来给大家回答一下这道面试题,另外想要文字版的小伙伴可以在评论区扣666领取,我已经把它整理进了80万字面试宝典。
首先线程池中有7个参数,其中最重要的 是核心线程数和最大线程池数,当然这些参数没有固定的一个数值, 不同业务场景线程任务肯定参数不一样,可以根据你的业务类型来针对性回答:
如果任务主要是IO密集型的, 比如存在大量读写操作 像(大量文件读写、 大量网络请求, 频繁的数据库访问等操作)
那核心线程数就可以设置为CPU核心数的两倍左右 ,因为涉及的 I/O 操作通常会导致 线程大部分的时间会处于阻塞状态,所以线程数就应当设置稍大一些。
那 最大线程数可以设置为CPU核心数的四倍左右以便在出现大量并发 I/O 操作时能够有足够的线程来处理。
如果任务是CPU密集型的, 像 一些计算操作, 通常就需要大量的计算资源,因为计算操作会长时间占用 CPU 资源,线程过多会导致cpu占用高,所以参数不宜设置过大 可以将:
核心线程数设置为 CPU 核心数+1,以充分利用 CPU 资源。
最大线程数可以设置为CPU核心数的2倍左右,因为 CPU 密集型任务不会涉及 I/O 等待。
那其他参数我就不在这里重点说可以参考普遍的设置方式。
当然,以上是一些经验数值,实际情况我们需要根据服务器的资源占用情况,结合运行时的 cpu、内存等指标进行调整, 还要结合压测工具得到一个比较合理的范围。
当面试官问到你具体的业务场景那你可以根据你的业务类型, 再结合上面经验数值说明就行了。
当然在高并发应用中我们还会搭建像 线程池的可视化监控+动态调整线程池参数 的平台,以应对线上的不同时刻的流量变化对线程池带来的挑战。 如果对这块有兴趣可以加我主页联系方式进行学习。