Just to make sure that I understand you correctly: You are using dynamic parallel processing and you create thousands of parallel work items inside one workflow? Every agent must complete (approve?) his work item before the workflow will continue/complete?
If the above is true, then it would be nice if you could explain what is the reasoning behind this logic (or what is the actual requirement / what are you trying to achieve with this)? I am not surprised if there are some performance problems.
I don't think I would ever let one single workflow instance handle thousands of approvals. I would start separate workflow for each approval - even if there was some kind of scenario which would require that all the approvals should be executed before something else could be done.
Regard,
Karri