Skip to content
进阶

一句话答案

CPU 密集型:N+1;IO 密集型:2N 或 N/(1-阻塞比);实际需压测找拐点,不要用 Executors 工厂方法。

核心要点

理论公式:

  • CPU 密集型:线程数 = CPU 核心数 + 1(+1 防止页缺失等偶发等待)
  • IO 密集型:线程数 = CPU 核心数 × 2,或更精确:
    线程数 = CPU 核心数 × (1 + 平均等待时间/平均计算时间)

实际建议:

任务类型参考值示例
纯计算N+1加密/压缩
数据库操作2N~3NCRUD 接口
HTTP 调用大(看超时时间)外部 API 调用

生产实践:

  1. 不要使用 Executors 工厂方法(队列无界/线程无上限)
  2. 动态调优:配置中心管理参数,运行时 setCorePoolSize() 热调整
  3. 压测确认:逐步加大线程数,观察 TPS/RT/CPU 的拐点

线程池监控指标:

  • 活跃线程数 / 队列堆积量 / 拒绝次数 / 任务执行时间
追问与易错

追问方向:

  • IO 密集型为什么设 2N?
  • 动态调整线程池参数怎么做?
  • 监控线程池需要关注哪些指标?

易错点:

  • ❌ CPU 密集型设 N 就行——+1 防止偶发等待
  • ❌ 不压测直接上线——理论值只是参考

💡 记忆锚点

CPU 密集型像厨师炒菜,灶台就那么多,人再多也只能排队等灶(N+1)。IO 密集型像服务员等上菜,等的时候可以去招呼别桌(2N 或更多)。公式只是起点,实际要压测找 TPS 拐点——过多的线程就像厨房挤太多人,反而互相撞来撞去更慢。