Sdílet prostřednictvím


Datový paralelismus (Task Parallel Library)

Datový paralelismus odkazuje na scénáře, ve kterých se stejná operace provádí souběžně (tj. paralelně) u prvků ve zdrojové kolekci nebo poli. V paralelních operacích dat je zdrojová kolekce rozdělená na oddíly, aby více vláken fungovalo na různých segmentech současně.

Knihovna TPL (Task Parallel Library) podporuje paralelismus dat prostřednictvím System.Threading.Tasks.Parallel třídy. Tato třída poskytuje paralelní implementace metod pro smyčky for a foreach (For a For Each v jazyce Visual Basic). Logiku smyčky pro smyčku nebo Parallel.ForEach smyčku Parallel.For napíšete stejně jako sekvenční smyčku. Není nutné vytvářet vlákna ani fronty pracovních položek. V základních smyčce nemusíte zamykat. TPL zpracovává veškerou práci na nízké úrovni za vás. Podrobné informace o použití Parallel.For a stažení dokumentu Vzory pro paralelní programování: Pochopení a použití paralelních vzorů s rozhraním .NET Framework 4Parallel.ForEach. Následující příklad kódu ukazuje jednoduchou foreach smyčku a její paralelní ekvivalent.

Poznámka:

Tato dokumentace používá k definování delegátů v TPL lambda výrazy. Pokud výrazy lambda v jazyce C# nebo Visual Basic neznáte, přečtěte si téma Výrazy lambda v PLINQ a TPL.

// Sequential version
foreach (var item in sourceCollection)
{
    Process(item);
}

// Parallel equivalent
Parallel.ForEach(sourceCollection, item => Process(item));
' Sequential version        
For Each item In sourceCollection
    Process(item)
Next

' Parallel equivalent
Parallel.ForEach(sourceCollection, Sub(item) Process(item))

Když se spustí paralelní smyčka, TPL rozdělí zdroj dat tak, aby smyčka fungovala na více částech současně. Plánovač úloh na pozadí rozdělí úlohu na základě systémových prostředků a úloh. Pokud je to možné, plánovač redistribuuje práci mezi více vlákny a procesory, pokud úloha přestane být vyvážená.

Poznámka:

Můžete také zadat vlastního dělitele nebo plánovače. Další informace naleznete v tématu Vlastní rozdělovače pro PLINQ a TPL a plánovače úloh.

Parallel.For Obě i Parallel.ForEach metody mají několik přetížení, které umožňují zastavit nebo přerušit provádění smyčky, monitorovat stav smyčky v jiných vláknech, udržovat stav vlákna-místní stav, finalizovat objekty thread-local, řídit stupeň souběžnosti atd. Pomocné typy, které tuto funkci umožňují, zahrnují ParallelLoopState, ParallelOptions, ParallelLoopResultCancellationTokena CancellationTokenSource.

Další informace naleznete v tématu Vzory pro paralelní programování: Principy a použití paralelních vzorů s rozhraním .NET Framework 4.

PlINQ podporuje paralelismus dat s deklarativní syntaxí nebo syntaxí typu dotazu. Další informace naleznete v tématu Paralelní LINQ (PLINQ).

Titulek Popis
Postupy: Zápis jednoduché smyčky Parallel.For Popisuje, jak napsat smyčku přes libovolnou For matici nebo indexovatelnou IEnumerable<T> zdrojovou kolekci.
Postupy: Zápis jednoduché smyčky Parallel.ForEach Popisuje, jak napsat smyčku přes jakoukoli IEnumerable<T> zdrojovou ForEach kolekci.
Postupy: Zastavení nebo přerušení smyčky Parallel.For Popisuje, jak zastavit nebo přerušit paralelní smyčku, aby byla o akci informována všechna vlákna.
Postupy: Zápis smyčky Parallel.For pomocí proměnných v místním vláknu Popisuje, jak napsat smyčku For , ve které každé vlákno udržuje privátní proměnnou, která není viditelná pro žádná další vlákna, a jak synchronizovat výsledky ze všech vláken po dokončení smyčky.
Postupy: Zápis smyčky Parallel.ForEach pomocí proměnných v místním oddílu Popisuje, jak napsat smyčku ForEach , ve které každé vlákno udržuje privátní proměnnou, která není viditelná pro žádná další vlákna, a jak synchronizovat výsledky ze všech vláken po dokončení smyčky.
Postupy: Zrušení smyčky Parallel.For nebo ForEach Popisuje, jak zrušit paralelní smyčku pomocí System.Threading.CancellationToken
Postupy: Zrychlení malých smyček Popisuje jeden způsob, jak urychlit provádění v případě, že tělo smyčky je velmi malé.
Task Parallel Library (TPL) Poskytuje přehled paralelní knihovny úloh.
Paralelní programování Zavádí paralelní programování v rozhraní .NET Framework.

Viz také