写给大忙人看的如何优雅设置线程池的大小

Posted 万猫学社

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了写给大忙人看的如何优雅设置线程池的大小相关的知识,希望对你有一定的参考价值。

线程池需要设置合适的大小,假如设置的太大,线程上线文切换过于频繁,造成大量资源开销,反而会使性能降低。假如设置的太小,存在很多可用的处理器资源却未在工作,会造成资源的浪费和对吞吐量造成损失。

为了充分利用处理器资源,创建的线程数至少要等于处理器核心数。如果所有的任务都是计算密集型的,那么线程数等于可用的处理器核心数就可以了。不过,如果所有的任务都是IO密集型,那么处理器大部分时间是空闲的,所有要适当的增加线程数。线程等待时间所占比例越高,需要越多线程。线程运算时间所占比例越高,需要越少线程。 于是可以使用下面的公式进行估算:

最佳线程数 = (1 + 线程等待时间/线程计算时间)* 目标CPU的使用率 * 处理器核心数

例如:平均每个线程计算运行时间为0.5s,而线程等待时间(非计算时间,比如IO)为1.5s,目标CPU的使用率是90%,CPU核心数为8,那么根据上面这个公式估算得到:(1 + 1.5/0.5) * 90% * 8 = 28.8。

即使有上面的简单估算方法,也许看似合理,但实际上也未必合理,都需要结合系统真实情况(比如是IO密集型或者是CPU密集型或者是纯内存操作)和硬件环境(CPU、内存、硬盘读写速度、网络状况等)来不断尝试达到一个符合实际的合理估算值,也可以尝试Dark Magic的估算方法

以上是关于写给大忙人看的如何优雅设置线程池的大小的主要内容,如果未能解决你的问题,请参考以下文章

写给大忙人看的Git案例总结

写给大忙人看的操作系统

《写给大忙人看的java》笔记--基本的编程结构

写给大忙人看的操作系统

写给大忙人看的Git案例总结推荐收藏

后端程序员必备!写给大忙人看的分布式事务基础!