Я хочу уточнить мое понимание многопоточности .NET и, в частности, какие методы .NET создают потоки, которые могут потенциально выполняться одновременно на разных процессорах или ядрах в многопроцессорной / базовой системе.
В платформе .NET TPL вы можете использовать методы Parallel.Invoke или Task.Factory.StartNew для достижения некоторого параллелизма.
Насколько я понимаю, в обоих случаях .NET создает новые Задачи (за кулисами для Parallel.Invoke), которые затем среда .NET выделяет управляемым потокам за кулисами, которые затем назначаются потокам, которые ЦП может выделять разные ядра или процессоры в зависимости от рабочей нагрузки. Основное различие между этими двумя методами заключается в семантике - Parallel.Invoke выполняет несколько задач и ожидает их завершения; Task.Factory.StartNew запускает новую задачу в фоновом режиме. В обоих случаях реальная работа может выполняться на разных ядрах или процессорах. Согласно Task Parallel Library (TPL) .
У меня есть коллега, который убежден, что только метод Parallel.Invoke позволяет выполнять потоки на разных ядрах / процессорах, и что Task.Factory.StartNew запускает новый поток, но этот поток будет запланирован только на одном ядре. / процессор - так что фактически не дает параллелизма.
Я не могу найти какую-либо документацию или статьи, в которых прямо указано, так ли это на самом деле. Мой коллега направляет меня к тем же статьям, которые я просматриваю, например, Асинхронное программирование на основе задач , которые, как мне кажется, подтверждают мое понимание, но мой коллега считает, что он подтверждает его.
В документации иногда используется термин «параллельная обработка» со ссылкой на Parallel.Invoke и «асинхронные задачи» со ссылкой на «Task.Factory.StartNew», но, насколько я понимаю, то же самое происходит в фоновом режиме в отношении для выделения нескольким процессорам / ядрам.
Может кто-нибудь, пожалуйста, помогите прояснить ситуацию, по возможности со ссылками на документацию / статьи.
Я знаю, что это звучит как попытка разрешения спора с коллегой, но я искренне хочу уточнить, правильно ли я понимаю или нет.