Rozszerzenia równoległe — Parallel Extensions

Framework stos

Parallel Extensions to nazwa programistyczna dla zarządzanej biblioteki współbieżności opracowanej we współpracy między Microsoft Research i zespołem CLR w firmie Microsoft . Biblioteka została wydana w wersji 4.0 systemu .NET Framework . Składa się z dwóch części: Parallel LINQ (PLINQ) i Task Parallel Library (TPL). Składa się również z zestawu koordynacyjnych struktur danych (CDS) – zestawów struktur danych służących do synchronizacji i koordynowania wykonywania współbieżnych zadań.

Równoległe LINQ

PLINQ lub Parallel LINQ , zrównoleglenie wykonywania zapytań na obiektach (LINQ to Objects) i danych XML (LINQ to XML). PLINQ jest przeznaczony do ujawniania równoległości danych za pomocą zapytań. Wszelkie obliczenia na obiektach, które zostały zaimplementowane jako zapytania, mogą być zrównoleglone przez PLINQ. Jednak obiekty muszą zaimplementować IParallelEnumerableinterfejs, który jest zdefiniowany przez sam PLINQ. Wewnętrznie używa TPL do wykonania.

Biblioteka zadań równoległych

Task Parallel Library ( TPL ) jest równoległość zadanie składnikiem Parallel Extensions dla .NET. Uwidacznia konstrukcje równoległe, takie jak równoległe Fori ForEachpętle, przy użyciu zwykłych wywołań metod i delegatów , dzięki czemu konstrukcje mogą być używane z dowolnych języków CLI . Zadanie tworzenia i kończenia wątków , a także skalowanie liczby wątków zgodnie z liczbą dostępnych procesorów, jest wykonywane przez samą bibliotekę, korzystając z harmonogramu kradnącego pracę .

TPL obejmuje również inne konstrukcje, takie jak Zadanie i Przyszłość . Zadanie jest działaniem, które mogą być wykonywane niezależnie od reszty programu. W tym sensie jest semantycznie równoważny wątkowi, z wyjątkiem tego, że jest to lżejszy obiekt i nie ma narzutu związanego z tworzeniem wątku systemu operacyjnego. Zadania są umieszczane w kolejce przez obiekt Menedżera zadań i są zaplanowane do uruchomienia w wielu wątkach systemu operacyjnego w puli wątków, gdy nadejdzie ich kolej.

Przyszłość to zadanie, które zwraca wynik. Wynik jest obliczany w wątku w tle hermetyzowanym przez obiekt Future , a wynik jest buforowany do momentu pobrania. Jeśli zostanie podjęta próba pobrania wyniku przed jego obliczeniem, wątek żądający będzie blokowany, dopóki wynik nie będzie dostępny.

Inną konstrukcją TPL jest klasa Parallel . TPL zapewnia podstawową formę równoległości strukturalnej za pomocą trzech metod statycznych w klasie Parallel:

Równolegle.Wywołaj
Wykonuje równolegle tablicę delegatów Action, a następnie czeka na ich zakończenie
Równolegle.Dla
Równoległy odpowiednik pętli for w języku C#
Równolegle.Dla każdego
Równoległy odpowiednik pętli foreach w języku C#

Architektura

Główną koncepcją w Parallel Extensions do .NET jest a Task, która jest małą jednostką kodu, zwykle reprezentowaną jako funkcja lambda , która może być wykonywana niezależnie. Zarówno PLINQ, jak i interfejs API TPL udostępniają metody tworzenia zadań — PLINQ dzieli zapytanie na mniejsze zadania Parallel.For, Parallel.ForEacha Parallel.Invokemetody i dzielą pętlę na zadania.

PFX zawiera Task Managerobiekt, który planuje wykonanie zadań. Menedżer zadań zawiera globalną kolejkę zadań, które są następnie wykonywane. Zawiera również wiele wątków, na których wykonywane są zadania. Domyślnie tworzonych jest tyle wątków, ile jest procesorów (lub rdzeni procesorów) w systemie, chociaż liczba ta może być modyfikowana ręcznie. Każdy wątek jest powiązany z kolejką zadań specyficzną dla wątku. W stanie bezczynności każdy wątek pobiera partię zadań i umieszcza je w swojej lokalnej kolejce, gdzie są następnie wykonywane jeden po drugim. Jeśli globalna kolejka jest pusta, wątek będzie szukał zadań w kolejkach swoich sąsiadów i weźmie zadania, które były w kolejce najdłużej ( kradzież zadań ). W trakcie realizacji Zadania będą wykonywane niezależnie, przy czym zmiana stanu jednego Zadania będzie niezależna od pozostałych. W rezultacie, jeśli używają zasobu udostępnionego, nadal muszą być synchronizowane ręcznie przy użyciu blokad lub innych konstrukcji.

Zobacz też

Bibliografia

Zewnętrzne linki