Parallel.For
, как правило, лучше всего подходит для go.
Следует помнить, что вы (как правило) не знаете, сколько ядер у вас на целевой машине (если вы не пишете для одной очень конкретной c цели). Таким образом, любые предположения о степени распараллеливания сомнительны. Даже если вы знаете, сколько у вас ядер, вы не знаете, насколько они заняты другими вещами.
Система времени выполнения знает все эти вещи и лучше способна оптимизировать, чем вы, как программист.
Таким образом, даже с Parallel.For
обычно нет необходимости указывать степень распараллеливания.
Использование Thread
напрямую - плохая идея. Если вы попросите Thread
, вы получите его, даже если ОС не хватает их, и это может замедлить процесс.
Если вы используете Task
, система может отключиться давая вам актуальную ветку, если ее не хватает. Таким образом, использование Task
s оставляет системе возможность выполнить некоторую оптимизацию, но Parallel.For
все еще проще.