Start here. This is the direct spoken answer to practice first.
Overview
Tunes worker pools and reservation behavior to task shape instead of maximizing a single concurrency number.
Celery concurrency controls how many tasks a worker can execute at once, while prefetch controls how many messages it reserves ahead of execution. High values can improve throughput for short tasks, but a worker may hold work that another idle worker could process. Long tasks make that imbalance more visible. I choose the worker pool and concurrency from whether the task is CPU-bound, blocking I/O, or cooperative async work.