WikiDer > Параллельные расширения
Параллельные расширения было названием разработки для удалось параллелизм библиотека разработан в результате сотрудничества между 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 включает Диспетчер задач
объект, который планирует выполнение Задач. Диспетчер задач содержит глобальный очередь Задач, которые затем выполняются. Он также инкапсулирует несколько потоки на котором выполняются Задачи. По умолчанию создается столько потоков, сколько процессоров (или ядер процессора) в системе, хотя это количество можно изменить вручную. Каждый поток связан с зависящей от потока очередью задач. В режиме ожидания каждый поток берет пакет задач и помещает их в свою локальную очередь, где они затем выполняются по очереди. Если глобальная очередь пуста, поток будет искать Задачи в очередях своих одноранговых узлов и возьмет Задачи, которые находились в очереди дольше всех (кража задания). При выполнении Задачи будут выполняться независимо, при этом изменение состояния одной Задачи не зависит от других. В результате, если они используют общий ресурс, их по-прежнему необходимо синхронизировать вручную с помощью блокировок или других конструкций.
Смотрите также
- Параллелизм и координация времени выполнения
- Присоединяется
- Силк/Силк Плюс - сопоставимая технология для C и C ++
- Grand Central Dispatch - сопоставимая технология в Mac OS X 10.6 разработан яблоко.
- Параллелизм Java - сопоставимая технология в Ява (также известен как JSR 166).
- Заправка строительных блоков (TBB) - сопоставимая технология для C ++, доступная для многих систем, изначально созданных Intel (также с открытым исходным кодом)
- Шаблон пула потоков
- Параллелизм задач
Рекомендации
- ^ «Что нового в .NET Framework 4». Получено 21 сентября 2011.
- ^ а б «Программирование в эпоху параллелизма: параллельное программирование с PFX». Получено 16 октября 2007.
- ^ а б c «Журнал MSDN: параллельная библиотека задач». Архивировано из оригинал 14 октября 2007 г.. Получено 16 октября 2007.
- ^ а б «Июнь 2008 CTP - Параллельные расширения .NET FX». Получено 6 августа 2008.
- ^ «Более мощные агрегаты в PLINQ». Получено 6 августа 2008.
- ^ а б Даффи, Джо (2009). Параллельное программирование в Windows. С. «887–929». ISBN 978-0321434821.
- ^ Лейен, Даан; Шульте, Вольфрам; Буркхардт, Себастьян (2009). «Дизайн параллельной библиотеки задач». Уведомления ACM SIGPLAN. 44 (10): 227. CiteSeerX 10.1.1.146.4197. Дои:10.1145/1639949.1640106.