Sdílet prostřednictvím


Datový paralelismus (paralelní knihovna úloh)

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 metodické paralelní implementace smyček for a foreach (For a For Each v jazyce Visual Basic). Logiku cyklu pro Parallel.For nebo Parallel.ForEach cyklus napíšete podobně jako byste psali obyčejný cyklus. Není nutné vytvářet vlákna ani fronty pracovních položek. Ve základních smyčkách nemusíte používat zámky. TPL zpracovává veškerou práci na nízké úrovni za vás. Podrobné informace o použití Parallel.For a Parallel.ForEach můžete stáhnout v dokumentu Vzory pro paralelní programování: Pochopení a použití paralelních vzorů pomocí rozhraní .NET Framework 4. Následující příklad kódu ukazuje jednoduchou foreach smyčku a její paralelní ekvivalent.

Poznámka:

Tato dokumentace používá výrazy lambda k definování delegátů v TPL. 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é poskytnout 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.

Obě metody Parallel.For a Parallel.ForEach mají několik přetížení, které umožňují zastavit či přerušit provádění smyčky, monitorovat její stav v rámci jiných vláken, udržovat stav lokální pro vlákno, finalizovat objekty lokální pro vlákno, řídit stupeň souběžnosti a podobně. 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
Jak na to: Napsat jednoduchou smyčku Parallel.For Popisuje, jak napsat smyčku přes libovolnou For matici nebo indexovatelnou IEnumerable<T> zdrojovou kolekci.
Jak na to: Napsat jednoduchou smyčku Parallel.ForEach Popisuje, jak napsat smyčku přes jakoukoli ForEach zdrojovou IEnumerable<T> 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.
Jak psát smyčku Parallel.For s Thread-Local proměnnými 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.
Jak napsat smyčku Parallel.ForEach s proměnnými typu Partition-Local 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.
Jak na to: 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é.
Knihovna TPL (Task Parallel Library) Poskytuje přehled paralelní knihovny úloh.
Paralelní programování Zavádí paralelní programování v rozhraní .NET Framework.

Viz také