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

Параллельный LINQ PLINQ или Parallel LINQСокращение от Language INtegrated Query (рус. Интегрированный языковой запрос) распараллеливает выполнение запросов к объектам (LINQ для Объектов) и данным XMLСокращение от eXtensible Markup Language (рус. Расширяемый язык разметки) (LINQ для XML). PLINQ предназначен для выявления с помощью запросов. PLINQ может распараллелить любые вычисления над объектами, реализованные как запросы. Однако объекты должны реализовывать интерфейс IParallelEnumerable, который определяется самим PLINQ. Внутренне он использует для выполнения TPL.

Библиотека параллельных задач Библиотека параллельных задач (TPLСокращение от Task Parallel Library) — это компонент параллельных расширений .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 включает объект Диспетчер задач, который планирует выполнение задач. Диспетчер задач содержит глобальную очередь задач, которые затем выполняются. Он также инкапсулирует несколько потоков, в которых выполняются Задачи. По умолчанию создаётся столько потоков, сколько процессоров (или ядер процессора) в системе, хотя это число может быть изменено вручную. Каждый поток связан с определённой для потока очередью Задач. В режиме ожидания каждый поток берёт пакет задач и помещает их в свою локальную очередь, где они затем выполняются по очереди. Если глобальная очередь пуста, поток будет искать Задачи в очередях своих одноранговых узлов и будет брать Задачи, которые находились в очереди дольше всех (постепенный захват задач). При выполнении Задачи будут выполняться независимо, при этом изменение состояния одной Задачи не зависит от других. В результате, если они используют общий ресурс, их всё равно необходимо синхронизировать вручную с помощью блокировок или других конструкций.

См. также Concurrency and Coordination Runtime. Cilk/Cilk Plus — сравнимая технология для C и C++. Grand Central Dispatch — сравнимая технология в Mac OS X 10.6 разработанная фирмой Apple. Параллелизм в Java — сравнимая технология в Java (также известна как JSR 166). Intel Threading Building Blocks (ITBB) — сравнимая технология для C++, доступна для многих систем, изначально созданных Intel (также с открытым исходным кодом).

Ссылки

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

Параллельное валютное ОСАГО июнь 2008 года Центр разработчиков параллельных вычислений

Категория:Библиотеки параллельного программирования