В общем виде хорошо распараллелить получается только множество однотипных, мелких задач примерно одного размера.
Задачи должны быть однотипными и примерно одного размера, что бы для любого достаточно большого N, можно было сказать что N одновременно выполняющихся задач создают одинаковую нагрузку вне зависимости от количества экземпляров и планировщик был свободен в выборе.
Задачи должны быть мелкими и примерно одного размера, чтобы обеспечить приемлемое время отклика и не вызывать голодания.
Если условия не выполняются, особо не распараллелишь.
Ещё один важный момент — объём контекста задачи и его уникальность. Известный факт, выключение HyperThreading может заметно повысить производительность SQL Server, так как ядра перестают перетирать общий кеш. WinRAR читает данные с диска и пишет туда же. Если архивировать в сто потоков, скорость только упадёт, так как головка винчестера будет конвульсивно дёргаться, а не читать или писать данные. Какие-то задачи лучше не распараллеливать.