Parallel Extensions - так называлась библиотека управляемого параллелизма, разработанная в результате сотрудничества Microsoft Research и группы CLR в Microsoft . Библиотека выпущена в версии 4.0 .NET Framework . [1] Он состоит из двух частей: параллельного LINQ (PLINQ) и библиотеки параллельных задач (TPL). [2] [3] Он также состоит из набора структур данных координации (CDS) - наборов структур данных, используемых для синхронизации и координации выполнения параллельных задач. [4]
Параллельный LINQ[ редактировать ]
PLINQ или параллельный LINQ , распараллеливающий выполнение запросов к объектам (LINQ to Objects) и данным XML (LINQ to XML). PLINQ предназначен для выявления параллелизма данных с помощью запросов. [2] Любые вычисления над объектами, реализованные как запросы, могут быть распараллелены с помощью PLINQ. Однако объекты должны реализовывать IParallelEnumerable
интерфейс, который определяется самим PLINQ. Внутренне он использует TPL для исполнения. [4] [5]
Библиотека параллельных задач [ править ]
Task Parallel Library ( TPL ) является параллелизм задач компонент параллельных расширений для .NET. [6] Он предоставляет параллельные конструкции, такие как parallel For
и ForEach
циклы, с использованием обычных вызовов методов и делегатов , поэтому конструкции могут использоваться из любых языков интерфейса командной строки . Работа по порождению и завершению потоков , а также по масштабированию количества потоков в соответствии с количеством доступных процессоров выполняется самой библиотекой [3] с использованием планировщика перехвата работы . [7]
TPL также включает в себя другие конструкции, такие как Task и Future . Задача это действие , которое может быть выполнено независимо от остальной части программы. В этом смысле он семантически эквивалентен потоку, за исключением того, что это более легкий объект и не требует дополнительных затрат на создание потока ОС. Задачи ставятся в очередь объектом диспетчера задач и планируются для выполнения в нескольких потоках ОС в пуле потоков, когда приходит их очередь.
Будущее - это задача, которая возвращает результат. Результат вычисляется в фоновом потоке, инкапсулированном объектом Future , и результат буферизуется до тех пор, пока он не будет получен. [3] Если будет сделана попытка получить результат до того, как он будет вычислен, то запрашивающий поток будет блокироваться до тех пор, пока результат не станет доступен. [6]
Другая конструкция TPL - это класс Parallel . TPL предоставляет базовую форму структурированного параллелизма с помощью трех статических методов в классе Parallel:
- Parallel.Invoke
- Выполняет массив делегатов Action параллельно, а затем ожидает их завершения
- Параллельный.
- Параллельный эквивалент цикла for в C #
- Parallel.ForEach
- Параллельный эквивалент цикла foreach в C #
Архитектура [ править ]
Основная концепция Parallel Extensions to .NET - это Task
небольшая единица кода, обычно представленная как лямбда-функция , которая может выполняться независимо. И PLINQ, и TPL API предоставляют методы для создания задач - PLINQ делит запрос на более мелкие задачи Parallel.For
, Parallel.ForEach
а Parallel.Invoke
методы и делят цикл на задачи.
PFX включает Task Manager
объект, который планирует выполнение задач. Диспетчер задач содержит глобальную очередь задач, которые затем выполняются. Он также инкапсулирует несколько потоков, в которых выполняются Задачи. По умолчанию создается столько потоков, сколько процессоров (или ядер процессора) в системе, хотя это число может быть изменено вручную. Каждый поток связан с определенной для потока очередью Задач. В режиме ожидания каждый поток берет пакет задач и помещает их в свою локальную очередь, где они затем выполняются по очереди. Если глобальная очередь пуста, поток будет искать Задачи в очередях своих одноранговых узлов и будет брать Задачи, которые находились в очереди дольше всех ( кража задач). При выполнении Задачи будут выполняться независимо, при этом изменение состояния одной Задачи не зависит от других. В результате, если они используют общий ресурс, их все равно необходимо синхронизировать вручную с помощью блокировок или других конструкций.
См. Также [ править ]
- Параллелизм и координация времени выполнения
- Присоединяется
- Cilk / Cilk Plus - сопоставимая технология для C и C ++
- Grand Central Dispatch - аналогичная технология в Mac OS X 10.6, разработанная Apple .
- Java Concurrency - сопоставимая технология в Java (также известная как JSR 166 ).
- Threading Building Blocks (TBB) - сравнимая технология для C ++, доступная для многих систем, изначально созданных Intel (также с открытым исходным кодом)
- Шаблон пула потоков
- Параллелизм задач
Ссылки [ править ]
- ^ «Что нового в .NET Framework 4» . Проверено 21 сентября 2011 года .
- ^ a b «Программирование в эпоху параллелизма: параллельное программирование с PFX» . Проверено 16 октября 2007 года .
- ^ a b c «Журнал MSDN: параллельная библиотека задач» . Архивировано из оригинального 14 октября 2007 года . Проверено 16 октября 2007 года .
- ^ a b «Июнь 2008 г. CTP - Параллельные расширения .NET FX» . Проверено 6 августа 2008 года .
- ^ «Более мощные агрегаты в PLINQ» . Проверено 6 августа 2008 года .
- ^ a b Даффи, Джо (2009). Параллельное программирование в Windows . С. «887–929». ISBN 978-0321434821.
- ^ Leijen, Даан; Шульте, Вольфрам; Буркхардт, Себастьян (2009). «Дизайн параллельной библиотеки задач». Уведомления ACM SIGPLAN . 44 (10): 227. CiteSeerX 10.1.1.146.4197 . DOI : 10.1145 / 1639949.1640106 .
Внешние ссылки [ править ]
В Викиучебнике есть книга на тему: .NET Development Foundation. |
- Параллельное валютное ОСАГО июнь 2008 г.
- Центр разработчиков параллельных вычислений