Sdílet prostřednictvím


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ámkaPozná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ámkaPozná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

Postupy: Psát jednoduché smyčky Parallel.For

Popisuje, jak zapisovat smyčku For přes jakékoliv pole nebo indexovanou zdrojovou kolekci IEnumerable<T>.

Postupy: Jak vytvořit jednoduchou paralelní ForEach smyčku

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ů.

Postupy: Zrušení smyček Parallel.For nebo ForEach

Popisuje, jak zrušit paralelní smyčku pomocí System.Threading.CancellationToken

Postupy: Jak zrychlit těla malých smyček

Popisuje jeden ze způsobů, jak urychlit spuštění smyčky jejíž tělo je velmi malé.

Knihovna paralelních úloh

Obsahuje přehled knihovny Task Parallel Library.

Paralelní programování v rozhraní .NET Framework

Představuje paralelní programování v rozhraní .NET Framework.

Viz také

Koncepty

Paralelní programování v rozhraní .NET Framework