Datový paralelismus (Task Parallel Library)
Datový paralelismus popisuje scénáře, ve kterých je stejná operace prováděna souběžně (tedy paralelně) s prvky ve zdrojové kolekci nebo poli. Datový paralelismus s imperativní syntaxí je podporován několika přetíženími metod For a ForEach ve třídě System.Threading.Tasks.Parallel. V datově paralelních operacích je zdrojová kolekce dat rozdělena tak, aby více vláken mohlo současně pracovat s různými segmenty. TPL podporuje datový paralelismus prostřednictvím třídy System.Threading.Tasks.Parallel. Tato třída poskytuje na metodách založené paralelní implementace smyček for a foreach (v jazyce Visual Basic For a For Each). Zápis logiky smyčky pro Parallel.For i Parallel.ForEach je obdobný jako u sekvenční smyčky. Není nutné vytvářet vlákna či zařazovat pracovní položky do fronty. V základních smyčkách není nutné používat zámky. TPL zpracovává veškerou nízkoúrovňovou práci automaticky. Následující příklad kódu ukazuje jednoduchou smyčku foreach a její paralelní ekvivalent.
Poznámka |
---|
Tato dokumentace používá k definování delegátů v TPL lambda výrazy.Pokud nejste obeznámeni s lambda výrazy v jazyce C# nebo Visual Basic, pokračujte na Lambda výrazy v PLINQ a TPL. |
' Sequential version
For Each item In sourceCollection
Process(item)
Next
' Parallel equivalent
Parallel.ForEach(sourceCollection, Sub(item) Process(item))
// Sequential version
foreach (var item in sourceCollection)
{
Process(item);
}
// Parallel equivalent
Parallel.ForEach(sourceCollection, item => Process(item));
Jakmile je paralelní smyčka spuštěna, TPL rozdělí zdroj dat tak, aby smyčka mohla pracovat souběžně s více částmi. Plánovač úloh na pozadí rozdělí úlohu na základě systémových prostředků a zatížení. Pokud je to možné, plánovač redistribuuje práci mezi více vlákny a procesory, když je pracovní vytížení nevyvážené.
Poznámka |
---|
Lze také zadat vlastní rozdělovač nebo plánovač.Další informace naleznete v tématu Vlastní Partitioners PLINQ a TPL a Plánovače úloh. |
Obě metody Parallel.For i Parallel.ForEach mají několik přetížení, která umožňují zastavit či přerušit běh smyčky, sledovat stav smyčky na jiných vláknech, spravovat místní stav vlákna, finalizovat místní objekty vlákna, určit stupeň souběžnosti atd. Podpůrné typy, které umožňují tyto funkce zahrnují ParallelLoopState, ParallelOptions a ParallelLoopResult, CancellationToken a CancellationTokenSource.
Další informace naleznete v tématu Datový paralelismus (Task Parallel Library).
Datový paralelismus s deklarativní syntaxí nebo syntaxí podobné dotazům je prostřednictvím PLINQ podporován. Další informace naleznete v tématu Paralelní LINQ (PLINQ).
Příbuzná témata
Title |
Popis |
---|---|
Popisuje, jak zapisovat smyčku For přes jakékoliv pole nebo indexovanou zdrojovou kolekci IEnumerable<T>. |
|
Popisuje, jak zapisovat smyčku ForEach přes jakoukoliv zdrojovou kolekci IEnumerable<T>. |
|
Postupy: Zastavení nebo zrušení volaní z Parallel.For smyčky |
Popisuje, jak ukončit nebo přerušit paralelní smyčku tak, aby byla o této akci informována všechna vlákna. |
Postupy: Zápis Parallel.For smyčky, který byl podproces místní proměnné |
Popisuje, jak zapisovat smyčku For, ve které každé vlákno udržuje soukromou proměnnou, která není viditelná pro jakékoliv jiné vlákno, a způsob, jak synchronizovat výsledky ze všech vláken po dokončení smyčky. |
Postupy: Zápis Parallel.ForEach smyčky, který byl podproces místní proměnné |
Popisuje, jak psát ForEach smyčky, ve kterém každý podproces udržuje soukromé proměnné, který není viditelný a výsledky ze všech podprocesů synchronizace po dokončení smyčky jiných podprocesů. |
Popisuje, jak zrušit paralelní smyčku pomocí System.Threading.CancellationToken |
|
Popisuje jeden ze způsobů, jak urychlit spuštění smyčky jejíž tělo je velmi malé. |
|
Obsahuje přehled knihovny Task Parallel Library. |
|
Představuje paralelní programování v rozhraní .NET Framework. |