Parallélisme de données (bibliothèque parallèle de tâches)Data Parallelism (Task Parallel Library)

Le parallélisme des données fait référence aux scénarios dans lesquels la même opération est exécutée de manière simultanée (autrement dit, en parallèle) sur les éléments d’un tableau ou d’une collection source.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. Dans les opérations en parallèle de données, la collection source est partitionnée afin que plusieurs threads puissent fonctionner simultanément sur des segments différents.In data parallel operations, the source collection is partitioned so that multiple threads can operate on different segments concurrently.

La bibliothèque parallèle de tâches prend en charge le parallélisme des données via la classe System.Threading.Tasks.Parallel.The Task Parallel Library (TPL) supports data parallelism through the System.Threading.Tasks.Parallel class. Cette classe fournit des implémentations parallèles, fondées sur une méthode, des boucles for et foreach (For et For Each en Visual Basic).This class provides method-based parallel implementations of for and foreach loops (For and For Each in Visual Basic). Vous écrivez la logique de boucle d'une boucle Parallel.For ou Parallel.ForEach de la même manière que pour une boucle séquentielle.You write the loop logic for a Parallel.For or Parallel.ForEach loop much as you would write a sequential loop. Vous n’avez pas à créer de threads ou d’éléments de travail de file d’attente.You do not have to create threads or queue work items. Dans les boucles simples, vous n'avez pas besoin d'acquérir de verrous.In basic loops, you do not have to take locks. La bibliothèque parallèle de tâches gère tous les travaux de bas niveau pour vous.The TPL handles all the low-level work for you. Pour des informations détaillées sur l’utilisation de Parallel.For et Parallel.ForEach, téléchargez le document Patterns for Parallel Programming : Understanding and Applying Parallel Patterns with the .NET Framework 4 (Modèles de programmation parallèle : présentation et application des modèles parallèles avec .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. L'exemple de code suivant montre une boucle foreach simple et son équivalent parallèle.The following code example shows a simple foreach loop and its parallel equivalent.

Notes

Cette documentation utilise les expressions lambda pour définir les délégués de la bibliothèque parallèle de tâches.This documentation uses lambda expressions to define delegates in TPL. Si les expressions lambda en C# ou Visual Basic ne vous sont pas familières, consultez la page Expressions lambda en PLINQ et dans la bibliothèque parallèle de tâches.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))

Quand une boucle parallèle s'exécute, la bibliothèque parallèle de tâches partitionne la source de données afin que la boucle puisse s'exécuter simultanément sur plusieurs parties.When a parallel loop runs, the TPL partitions the data source so that the loop can operate on multiple parts concurrently. En arrière-plan, le planificateur de tâches partitionne la tâche en fonction des ressources système et de la charge de travail.Behind the scenes, the Task Scheduler partitions the task based on system resources and workload. Quand cela lui est possible, le planificateur redistribue le travail entre plusieurs threads et processeurs si la charge de travail est déséquilibrée.When possible, the scheduler redistributes work among multiple threads and processors if the workload becomes unbalanced.

Notes

Vous pouvez également fournir votre propre partitionneur ou planificateur personnalisé.You can also supply your own custom partitioner or scheduler. Pour plus d’informations, consultez la page Partitionneurs personnalisés pour PLINQ et la bibliothèque parallèle de tâches (TPL) et Planificateurs de tâches.For more information, see Custom Partitioners for PLINQ and TPL and Task Schedulers.

Les méthodes Parallel.For et Parallel.ForEach ont plusieurs surcharges qui vous permettent d'arrêter ou de quitter l'exécution d'une boucle, de surveiller l'état de la boucle sur d'autres threads, de maintenir l'état local de thread, de finaliser des objets locaux de thread, de contrôler le degré d'accès concurrentiel, etc.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. Les types d'assistance qui permettent ces fonctionnalités incluent ParallelLoopState, ParallelOptions, ParallelLoopResult, CancellationToken et CancellationTokenSource.The helper types that enable this functionality include ParallelLoopState, ParallelOptions, ParallelLoopResult, CancellationToken, and CancellationTokenSource.

Pour plus d’informations, consultez la page Patterns for Parallel Programming: Understanding and Applying Parallel Patterns with the .NET Framework 4 (Modèles de programmation parallèle : présentation et application des modèles parallèles avec .NET Framework 4).For more information, see Patterns for Parallel Programming: Understanding and Applying Parallel Patterns with the .NET Framework 4.

Le parallélisme des données avec syntaxe déclarative ou de requête est pris en charge par PLINQ.Data parallelism with declarative, or query-like, syntax is supported by PLINQ. Pour plus d’informations, consultez la page PLINQ (Parallel LINQ).For more information, see Parallel LINQ (PLINQ).

TitreTitle DescriptionDescription
Guide pratique pour écrire une boucle Parallel.For simpleHow to: Write a Simple Parallel.For Loop Explique comment écrire une boucle For sur tout tableau ou collection source IEnumerable<T> indexable.Describes how to write a For loop over any array or indexable IEnumerable<T> source collection.
Guide pratique pour écrire une boucle Parallel.ForEach simpleHow to: Write a Simple Parallel.ForEach Loop Explique comment écrire une boucle ForEach sur toute collection source IEnumerable<T>.Describes how to write a ForEach loop over any IEnumerable<T> source collection.
Guide pratique pour arrêter ou quitter une boucle Parallel.ForHow to: Stop or Break from a Parallel.For Loop Explique comment arrêter ou rompre une boucle parallèle afin que tous les threads soient informés de l'action.Describes how to stop or break from a parallel loop so that all threads are informed of the action.
Guide pratique pour écrire une boucle Parallel.For avec des variables locales de threadHow to: Write a Parallel.For Loop with Thread-Local Variables Explique comment écrire une boucle For dans laquelle chaque thread maintient une variable privée qui n’est pas visible pour les autres threads et comment synchroniser les résultats de tous les threads quand la boucle se termine.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.
Guide pratique pour écrire une boucle Parallel.ForEach avec des variables locales de partitionHow to: Write a Parallel.ForEach Loop with Partition-Local Variables Explique comment écrire une boucle ForEach dans laquelle chaque thread maintient une variable privée qui n’est pas visible pour les autres threads et comment synchroniser les résultats de tous les threads quand la boucle se termine.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.
Guide pratique pour annuler une boucle Parallel.For ou ForEachHow to: Cancel a Parallel.For or ForEach Loop Explique comment annuler une boucle parallèle à l'aide d'un System.Threading.CancellationToken.Describes how to cancel a parallel loop by using a System.Threading.CancellationToken
Guide pratique pour accélérer les petits corps de bouclesHow to: Speed Up Small Loop Bodies Décrit une façon d'accélérer l'exécution quand un corps de boucle est très petit.Describes one way to speed up execution when a loop body is very small.
La bibliothèque parallèle de tâchesTask Parallel Library (TPL) Fournit une vue d’ensemble de la bibliothèque parallèle de tâches.Provides an overview of the Task Parallel Library.
Programmation parallèleParallel Programming Présente la programmation parallèle dans le .NET Framework.Introduces Parallel Programming in the .NET Framework.

Voir aussiSee also