Datový paralelismus (Task Parallel Library)Data Parallelism (Task Parallel Library)

Datový paralelismus odkazuje na scénáře, ve kterých je stejná operace provedena souběžně (paralelně) na prvcích ve zdrojové kolekci nebo poli.Data parallelism refers to scenarios in which the same operation is performed concurrently (that is, in parallel) on elements in a source collection or array. V datech paralelních operacích je zdrojová kolekce rozdělená tak, aby více vláken mohlo současně pracovat s různými segmenty.In data parallel operations, the source collection is partitioned so that multiple threads can operate on different segments concurrently.

Task Parallel Library (TPL) podporuje datový paralelismuing prostřednictvím třídy System.Threading.Tasks.Parallel.The Task Parallel Library (TPL) supports data parallelism through the System.Threading.Tasks.Parallel class. Tato třída poskytuje paralelní implementace smyčky for a foreach (For a For Each v Visual Basic).This class provides method-based parallel implementations of for and foreach loops (For and For Each in Visual Basic). Zapisujete logiku smyčky pro Parallel.For nebo smyčku Parallel.ForEach, která je velká, protože byste napsali sekvenční smyčku.You write the loop logic for a Parallel.For or Parallel.ForEach loop much as you would write a sequential loop. Nemusíte vytvářet vlákna nebo pracovní položky zařazené do fronty.You do not have to create threads or queue work items. V základních smyčkách nemusíte přijímat zámky.In basic loops, you do not have to take locks. TPL zpracovává veškerou práci na nízké úrovni za vás.The TPL handles all the low-level work for you. Chcete-li získat podrobné informace o použití Parallel.For a Parallel.ForEach, Stáhněte si vzor dokumentu pro paralelní programování: porozumění a použití paralelních vzorů s .NET Framework 4.For in-depth information about the use of Parallel.For and Parallel.ForEach, download the document Patterns for Parallel Programming: Understanding and Applying Parallel Patterns with the .NET Framework 4. Následující příklad kódu ukazuje jednoduchou smyčku foreach a její paralelní ekvivalent.The following code example shows a simple foreach loop and its parallel equivalent.

Poznámka

Tato dokumentace používá k definování delegátů v TPL lambda výrazy.This documentation uses lambda expressions to define delegates in TPL. Pokud nejste obeznámeni s lambda výrazy v C# nebo Visual Basic, přečtěte si téma lambda výrazy v PLINQ a TPL.If you are not familiar with lambda expressions in C# or Visual Basic, see Lambda Expressions in PLINQ and 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))

Při spuštění paralelní smyčky aplikace TPL rozdělí zdroj dat tak, aby smyčka mohla pracovat na více částech současně.When a parallel loop runs, the TPL partitions the data source so that the loop can operate on multiple parts concurrently. Na pozadí Plánovač úloh rozdělí úkol na základě systémových prostředků a zatížení.Behind the scenes, the Task Scheduler partitions the task based on system resources and workload. Pokud je to možné, Scheduler rozšíří práci mezi několika vlákny a procesory, pokud dojde k nevyrovnanému zatížení.When possible, the scheduler redistributes work among multiple threads and processors if the workload becomes unbalanced.

Poznámka

Můžete také dodat vlastní rozdělovač nebo Plánovač.You can also supply your own custom partitioner or scheduler. Další informace najdete v tématu vlastní dělicí metody pro PLINQ a TPL a plánovače úloh.For more information, see Custom Partitioners for PLINQ and TPL and Task Schedulers.

Metody Parallel.For i Parallel.ForEach 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 místní stav vlákna, finalizovat místní objekty vlákna, řídit stupeň souběžnosti a tak dále.Both the Parallel.For and Parallel.ForEach methods have several overloads that let you stop or break loop execution, monitor the state of the loop on other threads, maintain thread-local state, finalize thread-local objects, control the degree of concurrency, and so on. Mezi pomocné typy, které tuto funkci povolují, patří ParallelLoopState, ParallelOptions, ParallelLoopResult, CancellationTokena CancellationTokenSource.The helper types that enable this functionality include ParallelLoopState, ParallelOptions, ParallelLoopResult, CancellationToken, and CancellationTokenSource.

Další informace najdete v tématu vzory pro paralelní programování: porozumění a použití paralelních vzorů s .NET Framework 4.For more information, see Patterns for Parallel Programming: Understanding and Applying Parallel Patterns with the .NET Framework 4.

PLINQ podporuje datový paralelismus s deklarativní syntaxí nebo dotazem, jako je syntaxe.Data parallelism with declarative, or query-like, syntax is supported by PLINQ. Další informace naleznete v tématu PARALLEL LINQ (PLINQ).For more information, see Parallel LINQ (PLINQ).

NázevTitle PopisDescription
Postupy: Zápis jednoduché smyčky Parallel.ForHow to: Write a Simple Parallel.For Loop Popisuje, jak napsat smyčku For pro jakékoliv pole nebo indexovanou IEnumerable<T> kolekci zdroje.Describes how to write a For loop over any array or indexable IEnumerable<T> source collection.
Postupy: Zápis jednoduché smyčky Parallel.ForEachHow to: Write a Simple Parallel.ForEach Loop Popisuje, jak napsat smyčku ForEach v jakékoli IEnumerable<T> zdrojové kolekci.Describes how to write a ForEach loop over any IEnumerable<T> source collection.
Postupy: zastavení nebo přerušení ze smyčky Parallel. forHow to: Stop or Break from a Parallel.For Loop Popisuje, jak zastavit nebo přerušit paralelní smyčka, aby všechna vlákna byla informována o akci.Describes how to stop or break from a parallel loop so that all threads are informed of the action.
Postupy: Zápis smyčky Parallel.For pomocí proměnných v místním vláknuHow to: Write a Parallel.For Loop with Thread-Local Variables Popisuje, jak napsat smyčku For, ve které každé vlákno udržuje soukromou proměnnou, která není viditelná pro žádné další podprocesy, a jak synchronizovat výsledky ze všech vláken po dokončení smyčky.Describes how to write a For loop in which each thread maintains a private variable that is not visible to any other threads, and how to synchronize the results from all threads when the loop completes.
Postupy: Zápis smyčky Parallel.ForEach pomocí proměnných v místním oddíluHow to: Write a Parallel.ForEach Loop with Partition-Local Variables Popisuje, jak napsat smyčku ForEach, ve které každé vlákno udržuje soukromou proměnnou, která není viditelná pro žádné další podprocesy, a jak synchronizovat výsledky ze všech vláken po dokončení smyčky.Describes how to write a ForEach loop in which each thread maintains a private variable that is not visible to any other threads, and how to synchronize the results from all threads when the loop completes.
Postupy: Zrušení smyčky Parallel.For nebo ForEachHow to: Cancel a Parallel.For or ForEach Loop Popisuje, jak zrušit paralelní smyčku pomocí System.Threading.CancellationTokenDescribes how to cancel a parallel loop by using a System.Threading.CancellationToken
Postupy: Zrychlení malých smyčekHow to: Speed Up Small Loop Bodies Popisuje jeden způsob, jak zrychlit provádění, když je tělo smyčky velmi malé.Describes one way to speed up execution when a loop body is very small.
Task Parallel Library (TPL)Task Parallel Library (TPL) Poskytuje přehled úlohy paralelní knihovny.Provides an overview of the Task Parallel Library.
Paralelní programováníParallel Programming Zavádí paralelní programování v .NET Framework.Introduces Parallel Programming in the .NET Framework.

Viz také:See also