Paralelní rozšíření - Parallel Extensions

Parallel Extensions byl název vývoje pro knihovnu spravovaných souběžností vyvinutou na základě spolupráce mezi Microsoft Research a týmem CLR ve společnosti Microsoft . Knihovna byla vydána ve verzi 4.0 .NET Framework . Skládá se ze dvou částí: Parallel LINQ (PLINQ) a Task Parallel Library (TPL). Skládá se také ze sady koordinačních datových struktur (CDS) - souborů datových struktur používaných k synchronizaci a koordinaci provádění souběžných úkolů.

Paralelní LINQ

PLINQ nebo Parallel LINQ , paralelizující provádění dotazů na objekty (LINQ to Objects) a data XML (LINQ to XML). PLINQ je určen pro vystavení datového paralelismu pomocí dotazů. PLINQ může paralelizovat jakýkoli výpočet na objektech, který byl implementován jako dotazy. Objekty však musí implementovat IParallelEnumerable rozhraní, které je definováno samotným PLINQ. Interně pro provádění používá TPL .

Knihovna paralelních úloh

Task Parallel Library ( TPL ) je úkolem paralelismus složka Parallel Extensions .NET. Vystavuje paralelní konstrukce, jako jsou paralelní For a ForEach smyčky, pomocí pravidelných volání metod a delegátů , takže konstrukce lze použít z libovolných jazyků CLI . Vytváření a ukončování vláken , stejně jako škálování počtu vláken podle počtu dostupných procesorů, provádí samotná knihovna pomocí plánovače krádeže práce .

TPL zahrnuje také další konstrukty jako Task a Future . Úkol je akce, které mohou být provedeny nezávisle na zbytku programu. V tomto smyslu je sémanticky ekvivalentní vláknu, kromě toho, že se jedná o lehčí objekt a přichází bez režie vytváření vlákna OS. Úkoly jsou zařazeny do fronty objektem Správce úloh a jsou naplánovány tak, aby se spouštěly na více podprocesech OS ve fondu vláken, jakmile na ně přijde řada.

Budoucnost je úkol, který vrací výsledek. Výsledek se počítá v podprocesu na pozadí zapouzdřeném Future objektem a výsledek se ukládá do vyrovnávací paměti, dokud se nenačte. Pokud dojde k pokusu o načtení výsledku dříve, než byl vypočítán, bude žádající vlákno blokováno, dokud nebude k dispozici výsledek.

Druhým konstruktem TPL je paralelní třída. TPL poskytuje základní formu strukturovaného paralelismu pomocí tří statických metod ve třídě Parallel:

Parallel.Invoke
Provede paralelně řadu delegátů akce a pak čeká na jejich dokončení
Paralelní
Paralelní ekvivalent C # pro smyčku
Parallel.ForEach
Paralelní ekvivalent smyčky C # foreach

Architektura

Hlavní koncept v Parallel Extensions to .NET je a Task , což je malá jednotka kódu, obvykle představovaná jako funkce lambda , kterou lze provést nezávisle. PLINQ i TPL API poskytuje metody pro vytvoření Úkolů - PLINQ rozdělí dotaz na menší Úkoly a metody Parallel.For , Parallel.ForEach a Parallel.Invoke rozdělí smyčku na Úkoly.

PFX zahrnuje Task Manager objekt, který naplánuje provedení úkolů. Správce úloh obsahuje globální frontu úkolů, které se poté provedou. Také zapouzdřuje více podprocesů, na které jsou prováděny úkoly. Ve výchozím nastavení je vytvořeno tolik podprocesů, kolik je v systému procesorů (nebo procesorových jader), i když toto číslo lze upravit ručně. Každé vlákno je přidruženo k vláknové frontě úloh. Při nečinnosti každé vlákno vyzvedne dávku Úkolů a umístí je do své místní fronty, kde jsou poté po jednom provedeny. Pokud je globální fronta prázdná, vlákno vyhledá Úkoly ve frontách svých vrstevníků a vezme úkoly, které byly ve frontě nejdelší ( krádež úkolu ). Při provádění budou Úkoly prováděny nezávisle, se změnou stavu jednoho úkolu nezávisle na ostatních. Výsledkem je, že pokud používají sdílený prostředek, musí být stále synchronizovány ručně pomocí zámků nebo jiných konstrukcí.

Viz také

Reference

externí odkazy