Обратите внимание, что параллелизм магическим образом не дает вам больше ресурсов. Вам нужно установить, что замедляет CalculateSmth down.
Например, если он привязан к процессору (и вы используете одно ядро), то одинаковое количество тактов процессора попадет в код независимо от того, выполняете ли вы их последовательно или параллельно. Кроме того, вы получите некоторые накладные расходы от управления потоками. Тот же аргумент применяется к другим ограничениям (например, ввод / вывод)
Вы получите прирост производительности только в том случае, если CalculateSmth оставляет ресурс свободным во время его выполнения, который может быть использован другим экземпляром. Это не редкость. Например, если задача включает в себя ввод-вывод, за которым следуют некоторые операции с процессором, то процесс 1 может выполнять работу с процессором, а процесс 2 выполняет ввод-вывод. Как указывает Мэтс, цепочка производителей-потребителей может достичь этого, если у вас есть инфраструктура.