工程实践

线程池参数不是公式,而是业务设计

线程数、队列长度和拒绝策略,应该从任务类型、下游承压能力和降级方案倒推。

“CPU 密集型任务设为 CPU 核数加一,I/O 密集型任务设为 CPU 核数乘二”是一个不错的起点,却不是生产配置的终点。

线程池真正需要回答三个问题:

  1. 任务阻塞时,谁会先被拖垮?
  2. 高峰来临时,应该排队、快速失败,还是降级?
  3. 下游服务能承受多大的并发?

一个为搜索构建的线程池和一个为支付回调构建的线程池,拒绝策略往往应该完全不同。前者可以快速失败并返回兜底结果,后者则更需要保序、重试和可追踪的补偿机制。

因此,参数配置应该从业务的失败语义开始,再结合监控数据持续调整。公式负责给出初值,工程设计才决定最终值。