Interested Article - Parallel Extensions

Стек и компоненты .NET Framework до версии 4.5 включительно.

Parallel Extensions англ. — «Параллельные расширения») — библиотека управляемого параллелизма , разработанная в результате сотрудничества Microsoft Research и группы CLR в Microsoft . Библиотека была выпущена в версии 4.0 .NET Framework . Она состоит из двух частей: Параллельный LINQ (PLINQ) и Библиотека параллельных задач (TPL) . Она также состоит из набора структур данных координации (CDS) — наборов структур данных , используемых для синхронизации и координации выполнения параллельных задач .

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

PLINQ или Parallel LINQ распараллеливает выполнение запросов к объектам (LINQ для Объектов) и данным XML (LINQ для XML). PLINQ предназначен для выявления с помощью запросов . PLINQ может распараллелить любые вычисления над объектами, реализованные как запросы. Однако объекты должны реализовывать интерфейс IParallelEnumerable , который определяется самим PLINQ. Внутренне он использует для выполнения .

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

Библиотека параллельных задач ( TPL ) — это компонент параллельных расширений .NET . Она предоставляет параллельные конструкции, такие как параллельные циклы For и ForEach , с использованием обычных вызовов методов и делегатов , поэтому конструкции могут использоваться из любых языков интерфейса командной строки . Работа по порождению и завершению потока , а также масштабирование количества потоков в соответствии с количеством доступных процессоров выполняется самой библиотекой , используя планировщик .

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

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

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

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

Архитектура

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

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

См. также

Ссылки

  1. Сокращение от C ommon L anguage R untime ( рус. Общеязыковая среда выполнения )
  2. (неопр.) . Дата обращения: 21 сентября 2011. 23 сентября 2011 года.
  3. (неопр.) . Дата обращения: 16 октября 2007. 2 мая 2008 года.
  4. (неопр.) . Дата обращения: 16 октября 2007. 14 октября 2007 года.
  5. (неопр.) . Дата обращения: 6 августа 2008. 21 августа 2008 года.
  6. Сокращение от L anguage IN tegrated Q uery ( рус. Интегрированный языковой запрос )
  7. Сокращение от e X tensible M arkup L anguage ( рус. Расширяемый язык разметки )
  8. Сокращение от T ask P arallel L ibrary
  9. Джо Даффи. Параллельное программирование в Windows. — 2009. — P. "887–929". — ISBN 978-0321434821 .
  10. Даан Лейен; Вольфрам Шульте; Себастьян Буркхардт (2009). "Дизайн библиотеки параллельных задач". Уведомления ACM SIGPLAN . 44 (10): 227. CiteSeerX . doi : .

Внешние ссылки

Same as Parallel Extensions