Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

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 (также с открытым исходным кодом)
  • Шаблон пула потоков
  • Параллелизм задач

Ссылки [ править ]

  1. ^ «Что нового в .NET Framework 4» . Проверено 21 сентября 2011 года .
  2. ^ a b «Программирование в эпоху параллелизма: параллельное программирование с PFX» . Проверено 16 октября 2007 года .
  3. ^ a b c «Журнал MSDN: параллельная библиотека задач» . Архивировано из оригинального 14 октября 2007 года . Проверено 16 октября 2007 года .
  4. ^ a b «Июнь 2008 г. CTP - Параллельные расширения .NET FX» . Проверено 6 августа 2008 года .
  5. ^ «Более мощные агрегаты в PLINQ» . Проверено 6 августа 2008 года .
  6. ^ a b Даффи, Джо (2009). Параллельное программирование в Windows . С. «887–929». ISBN 978-0321434821.
  7. ^ Leijen, Даан; Шульте, Вольфрам; Буркхардт, Себастьян (2009). «Дизайн параллельной библиотеки задач». Уведомления ACM SIGPLAN . 44 (10): 227. CiteSeerX 10.1.1.146.4197 . DOI : 10.1145 / 1639949.1640106 . 

Внешние ссылки [ править ]

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