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

редактировать

.NET Framework стек

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

СОДЕРЖАНИЕ
  • 1 параллельный LINQ
  • 2 Параллельная библиотека задач
  • 3 Архитектура
  • 4 См. Также
  • 5 ссылки
  • 6 Внешние ссылки
Параллельный LINQ

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

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

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

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

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

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

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

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

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

Смотрите также
использованная литература
внешние ссылки
Последняя правка сделана 2024-01-08 04:06:28
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте