一、计算密集型
需非常多CPU计算资源,让每个CPU核心都参与计算,CPU性能充分利用,避免过多线程上下文切换,理想方案是:线程数 = CPU核数+1
也可CPU核数*2,要看JDK版本,及CPU配置(服务器CPU有超线程)。1.8来增加并行计算,想线程数 = CPU内核线程数*2
二、IO密集型
网络、磁盘 IO (与DB、缓存),一旦IO,线程就等待,结束才执行。多设线程数,等待时去做其它事,提高效率。
线程上下文切换有代价。IO密集型公式:线程数 = CPU核心数/(1-阻塞系数) 阻塞系数一般0.8~0.9,双核CPU理想线程数20,动态线程池看压测情况。
三、1000个并发线程,10台机器,每台机器4核,设计线程池大小
思路:CPU、IO密集型的情况。压测得合理参数配置。线程池动态调整。
CPU 密集:减少上下文切换,核心线程数5,队列长100,最大线程数和核心线程数一致。
IO 密集:分配一点核心线程数,更好利用 CPU,核心线程数 8,队列长100,最大线程池10
上面都是理论上的值。从核心线程数5 开始压测,对比结果,确定合适设置。极限:核心线程数和最大线程数都是 4,队列96,刚好100 请求
https://mp.weixin.qq.com/s/K5GThsd1dni1dzLAfOMnoA
https://www.cnblogs.com/thisiswhy/p/13877874.html
https://mp.weixin.qq.com/s/0j-g7F3YLqaS8ZVIIbkWgw