Parallélisme de données (bibliothèque parallèle de tâches)

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 dans une collection source ou un tableau. Le parallélisme des données avec syntaxe impérative est pris en charge par plusieurs surcharges des méthodes For et ForEach dans la classe System.Threading.Tasks.Parallel. 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. La bibliothèque parallèle de tâches prend en charge le parallélisme des données via la classe System.Threading.Tasks.Parallel. Cette classe fournit des implémentations parallèles basées sur méthode des boucles for et foreach (For et For Each en 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. Vous n'avez pas à créer de threads ou d'éléments de travail de file d'attente. Dans les boucles simples, il n'est pas nécessaire d'acquérir de verrous. La bibliothèque parallèle de tâches gère tous les travaux de bas niveau pour vous. L'exemple de code suivant montre une boucle foreach simple et son équivalent parallèle.

RemarqueRemarque

Cette documentation utilise des expressions lambda pour définir des délégués dans TPL.Si les expressions lambda en C# ou Visual Basic ne vous sont pas familières, consultez Expressions lambda en PLINQ et dans la bibliothèque parallèle de tâches.

' 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));

Lorsqu'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. 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. Lorsque cela lui est possible, le planificateur redistribue le travail entre plusieurs threads et processeurs si la charge de travail est déséquilibrée.

RemarqueRemarque

Vous pouvez également fournir votre propre partitionneur ou planificateur personnalisé.Pour plus d'informations, consultez Partitionneurs personnalisés pour PLINQ et la bibliothèque parallèle de tâches (TPL) et Planificateurs de tâches.

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. Les types d'assistance qui permettent ces fonctionnalités incluent ParallelLoopState, ParallelOptions, ParallelLoopResult, CancellationToken et CancellationTokenSource.

Pour plus d'informations, consultez Parallélisme de données (bibliothèque parallèle de tâches).

Le parallélisme des données avec syntaxe déclarative ou de requête est pris en charge par PLINQ. Pour plus d'informations, consultez Parallel LINQ (PLINQ).

Rubriques connexes

Titre

Description

Comment : écrire une boucle Parallel.For simple

Décrit comment écrire une boucle For sur tout tableau ou collection source IEnumerable<T> indexable.

Comment : écrire une boucle Parallel.ForEach simple

Décrit comment écrire une boucle ForEach sur toute collection source IEnumerable<T>.

Comment : arrêter ou quitter une boucle Parallel.For

Décrit comment arrêter ou rompre une boucle parallèle afin que tous les threads soient informés de l'action.

Comment : écrire une boucle Parallel.For comprenant des variables locales de thread

Décrit 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 lorsque la boucle se termine.

Comment : écrire une boucle Parallel.ForEach comprenant des variables de thread local

Décrit 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 lorsque la boucle se termine.

Comment : annuler une boucle Parallel.For ou ForEach

Décrit comment annuler une boucle parallèle à l'aide d'un System.Threading.CancellationToken

Comment : accélérer les petits corps de boucles

Décrit une façon d'accélérer l'exécution lorsqu'un corps de boucle est très petit.

Bibliothèque parallèle de tâches

Fournit une vue d'ensemble de la bibliothèque parallèle de tâches.

Programmation parallèle dans le .NET Framework

Présente une programmation parallèle dans le .NET Framework.

Voir aussi

Concepts

Programmation parallèle dans le .NET Framework