线程池需要设置合适的大小。如果设置太大,线程之间的线程切换会过于频繁,导致大量的资源开销,反而会降低性能。如果设置得太小,有很多可用的处理器资源没有工作,会造成资源浪费和吞吐量损失。要充分利用处理器资源,创建的线程数必须至少等于处理器核心数。如果所有任务都是计算密集型任务,那么线程数等于可用处理器内核数就可以了。但是,如果所有的任务都是IO密集型的,那么处理器大部分时间是空闲的,所以应该适当增加线程数。线程等待时间的百分比越高,需要的线程就越多。线程计算时间的百分比越高,需要的线程就越少。所以可以用下面的公式来估算:最优线程数=(1+线程等待时间/线程计算时间)目标CPU使用率处理器核心数例如:每个线程的平均计算运行时间为0.5s,线程等待时间(非计算时间,如IO)为1.5s,目标CPU使用率为90%,CPU核数为8,则根据上述公式估算:(1+1.5/0.5)90%8=28.8。即使用上面这种简单的估算方法,看似合理,实际上未必合理。需要结合系统的真实情况(如IO密集型或CPU密集型或纯内存操作)和硬件环境(CPU、内存、硬盘读写速度、网络情况等)来不断尝试达到一个现实合理的估计,或者你可以试试黑魔法的估计方法。
