标准答案

  1. CPU 密集任务通常把并发度控制在接近可用 CPU 核数的范围,再用压测观察上下文切换、运行队列和 P99。
  2. I/O 密集任务可以有更多等待中的工作,但连接池、文件描述符、队列内存和下游限流会形成新的上限。
  3. 应从目标吞吐、单任务服务时间、队列等待和资源饱和度反推并发上限,并为突发设置有界队列或拒绝策略。
  4. 不同接口、消息消费和后台任务应隔离资源,避免一种负载占满所有执行槽。

题目解析

CPU 密集任务的并发度接近可用核心数时,额外线程主要增加调度和缓存竞争;I/O 密集任务可以允许更多在途工作,但每个工作仍会占用连接、缓冲和下游配额。

并发上限不是一次计算出来的常数。要把目标吞吐、任务服务时间、连接池、下游限流、内存和请求截止时间放进同一个容量模型,再用逐步加压找到资源拐点。

有效配置要同时看吞吐和尾延迟。平均值还在变好时,P99、拒绝率、下游 429 和队列年龄可能已经恶化,这通常说明并发已经超过系统可恢复的范围。

常见误区

  • 误区:按 CPU 核数给所有任务设置线程数。改正:CPU 任务和 I/O 任务的瓶颈不同,应按任务类型和下游容量分别压测。
  • 误区:只看平均吞吐。改正:同时观察 P95/P99、超时率、连接等待和下游错误,确认吞吐没有以尾延迟为代价。
  • 误区:使用无界队列掩盖并发过载。改正:设置有界在途数量,并让入口得到阻塞、降级或拒绝信号。

作者信息