Параллельные расширения - Parallel Extensions

В .NET Framework куча

Параллельные расширения было названием разработки для удалось параллелизм библиотека разработан в результате сотрудничества между Microsoft Research и CLR команда в Microsoft. Библиотека выпущена в версии 4.0 .NET Framework.[1] Он состоит из двух частей: Параллельный LINQ (PLINQ) и Библиотека параллельных задач (ОСАГО).[2][3] Он также состоит из набора структуры данных координации (CDS) - наборы структуры данных используется для синхронизации и координации выполнения параллельных задач.[4]

Параллельный LINQ

PLINQ, или же Параллельный LINQ, распараллеливание выполнения запросов к объектам (LINQ to Objects) и данным XML (LINQ to XML). PLINQ предназначен для демонстрации параллелизм данных с помощью запросов.[2] PLINQ может распараллелить любые вычисления над объектами, реализованные как запросы. Однако объекты должны реализовывать IParallelEnumerable интерфейс, который определяется самим PLINQ. Внутри он использует ОСАГО для исполнения.[4][5]

Библиотека параллельных задач

В Библиотека параллельных задач (ОСАГО) это параллелизм задач компонент параллельных расширений .NET.[6] Он предоставляет параллельные конструкции, такие как parallel За и Для каждого циклы, используя обычные вызовы методов и делегаты, поэтому конструкции можно использовать из любых Языки интерфейса командной строки. Работа по нересту и прекращению потоки, а также масштабирование количества потоков в соответствии с количеством доступных процессоров выполняется самой библиотекой,[3] используя работа воровство планировщик.[7]

TPL также включает другие конструкции, такие как Задача и Будущее. А Задача это действие, которое может быть выполнено независимо от остальной части программы. В этом смысле он семантически эквивалентен потоку, за исключением того, что это более легкий объект и не требует дополнительных затрат на создание потока ОС. Задачи ставятся в очередь Диспетчер задач объект и запланированы для запуска в нескольких потоках ОС в пул потоков когда придет их очередь.

Будущее это задача, которая возвращает результат. Результат вычисляется в фоновом потоке, инкапсулированном Будущее объект, и результат буферизуется до тех пор, пока не будет получен.[3] Если будет сделана попытка получить результат до того, как он будет вычислен, то запрашивающий поток заблокируется, пока результат не станет доступен.[6]

Другая конструкция TPL - это Параллельный class.TPL обеспечивает базовую форму структурированного параллелизма с помощью трех статических методов в классе Parallel:

Parallel.Invoke
Параллельно выполняет массив делегатов Action, а затем ожидает их завершения
Параллельный.
Параллельный эквивалент цикла for в C #
Parallel.ForEach
Параллельный эквивалент C # цикл foreach

Архитектура

Основная концепция Parallel Extensions to .NET - это Задача, который представляет собой небольшую единицу кода, обычно представленную как лямбда-функция, которые могут выполняться независимо. И PLINQ, и TPL API предоставляют методы для создания задач - PLINQ делит запрос на более мелкие задачи, а Параллельный., Parallel.ForEach и Parallel.Invoke методы делят цикл на Задачи.

PFX включает Диспетчер задач объект, который планирует выполнение Задач. Диспетчер задач содержит глобальный очередь Задач, которые затем выполняются. Он также инкапсулирует несколько потоки на котором выполняются Задачи. По умолчанию создается столько потоков, сколько процессоров (или ядер процессора) в системе, хотя это количество можно изменить вручную. Каждый поток связан с зависящей от потока очередью задач. В режиме ожидания каждый поток берет пакет задач и помещает их в свою локальную очередь, где они затем выполняются по очереди. Если глобальная очередь пуста, поток будет искать Задачи в очередях своих одноранговых узлов и возьмет Задачи, которые находились в очереди дольше всех (кража задания). При выполнении Задачи будут выполняться независимо, при этом изменение состояния одной Задачи не зависит от других. В результате, если они используют общий ресурс, их по-прежнему необходимо синхронизировать вручную с помощью блокировок или других конструкций.

Смотрите также

Рекомендации

  1. ^ «Что нового в .NET Framework 4». Получено 21 сентября 2011.
  2. ^ а б «Программирование в эпоху параллелизма: параллельное программирование с PFX». Получено 16 октября 2007.
  3. ^ а б c «Журнал MSDN: параллельная библиотека задач». Архивировано из оригинал 14 октября 2007 г.. Получено 16 октября 2007.
  4. ^ а б «Июнь 2008 CTP - Параллельные расширения .NET FX». Получено 6 августа 2008.
  5. ^ «Более мощные агрегаты в PLINQ». Получено 6 августа 2008.
  6. ^ а б Даффи, Джо (2009). Параллельное программирование в Windows. С. «887–929». ISBN  978-0321434821.
  7. ^ Лейен, Даан; Шульте, Вольфрам; Буркхардт, Себастьян (2009). «Дизайн параллельной библиотеки задач». Уведомления ACM SIGPLAN. 44 (10): 227. CiteSeerX  10.1.1.146.4197. Дои:10.1145/1639949.1640106.

внешняя ссылка