We face the similar challenge at our PROD environment and want to share a bit thoughts here.
Each time when we publish mass files, if each file need time to rendering, then depends on the files number, the rendering process will be slower and slower until totally idled. If we are publishing resource, like image, which doesn't need too much time for render, the deployment action will be just idled if too many files under the waiting for deployment status.
For sure it is reasonable the publish performance depends on the environment limitation, but it is also a signal the Tridion publish queue design is not stable.
First, it is a queue system. A queue system should be able to receive as many task as possible, but only process the limited tasks with a stable speed without crash the entire queue. At our first test case, too many tasks in the waiting list actually will totally block the queue, which will made no task can be start. At second case, Tridion queue should auto detect if too many files be move to next stage, it should auto slow down the previous step to avoid overload the next step.
Second, there is no clear guideline or reference to show us, at which CPU and Memory configuration, it can support how many deployer work parallelize. In an ideal situation, it should even auto detect the current environment setting, and give us an number which can secure the stability. If we want to take the risk to add a bigger number, it is our business. But right now even we want to secure it, it is still unclear how configure the number. The answer we get from SDL support side is there is no guideline for this topic.
It is more like a half-finished product, which need client a lot of try / test/ guess to stable the publish queue.