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 d’un tableau ou d’une collection source. 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, fondées sur une 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, vous n'avez pas besoin d'acquérir de verrous. La bibliothèque parallèle de tâches gère tous les travaux de bas niveau pour vous. Pour des informations détaillées sur l’utilisation de Parallel.For et de Parallel.ForEach, téléchargez le document Modèles de programmation parallèle : comprendre et appliquer les modèles parallèles avec .NET Framework 4. L'exemple de code suivant montre une boucle foreach simple et son équivalent parallèle.

Notes

Cette documentation utilise les expressions lambda pour définir les délégués de la bibliothèque parallèle de tâches. 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.

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

Notes

Vous pouvez également fournir votre propre partitionneur ou planificateur personnalisé. 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.

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 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. Pour plus d’informations, consultez PLINQ (Parallel LINQ).

Intitulé Description
Procédure : écrire une boucle Parallel.For simple Explique comment écrire une boucle For sur tout tableau ou collection source IEnumerable<T> indexable.
Procédure : écrire une boucle Parallel.ForEach simple Explique comment écrire une boucle ForEach sur toute collection source IEnumerable<T>.
Guide pratique : arrêt ou sortie d’une boucle Parallel.For Explique comment arrêter ou rompre une boucle parallèle afin que tous les threads soient informés de l'action.
Procédure : écrire une boucle Parallel.For avec des variables locales de thread 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.
Procédure : écrire une boucle Parallel.ForEach avec des variables locales de partition 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.
Procédure : annuler une boucle Parallel.For ou ForEach Explique comment annuler une boucle parallèle à l'aide d'un System.Threading.CancellationToken.
Procédure : accélérer les petits corps de boucles Décrit une façon d'accélérer l'exécution quand 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 Présente la programmation parallèle dans le .NET Framework.

Voir aussi