Partager via


Parallélisme des 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 effectuée simultanément (autrement dit, en parallèle) sur les éléments d’une collection source ou d’un tableau. Dans les opérations parallèles de données, la collection source est partitionnée afin que plusieurs threads puissent fonctionner simultanément sur différents segments.

La bibliothèque parallèle de tâches prend en charge le parallélisme des données par le biais de la System.Threading.Tasks.Parallel classe. Cette classe fournit des implémentations parallèles basées sur des méthodes de boucles for et foreach (For et For Each en Visual Basic). Vous écrivez la logique de boucle pour une boucle Parallel.For ou une boucle Parallel.ForEach comme vous écririez 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. Le TPL gère tout le travail de bas niveau pour vous. Pour obtenir des informations détaillées sur l’utilisation de Parallel.For et Parallel.ForEach, téléchargez le document Patterns for Parallel Programming : Comprendre et appliquer les modèles parallèles avec .NET Framework 4. L’exemple de code suivant montre une boucle simple foreach et son équivalent parallèle.

Remarque

Cette documentation utilise des expressions lambda pour définir des délégués dans TPL. Si vous n’êtes pas familiarisé avec les expressions lambda en C# ou Visual Basic, consultez Expressions lambda dans PLINQ et 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))

Lorsqu’une boucle parallèle s’exécute, la TPL partitionne la source de données afin que la boucle puisse fonctionner 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. Si cela est possible, le planificateur redistribue le travail entre plusieurs threads et processeurs si la charge de travail devient déséquilibrée.

Remarque

Vous pouvez également fournir votre propre partitionneur personnalisé ou planificateur. Pour plus d’informations, consultez Partitionneurs personnalisés pour PLINQ et TPL et planificateurs de tâches.

Les méthodes Parallel.For et Parallel.ForEach ont plusieurs surcharges qui vous permettent d’arrêter ou d’interrompre l’exécution de la boucle, de surveiller l’état de la boucle sur d’autres threads, de maintenir l’état local du thread, de finaliser les objets locaux de thread, de contrôler le degré de concurrence, etc. Les types d’assistance qui activent cette fonctionnalité incluent ParallelLoopState, , ParallelOptionsParallelLoopResult, CancellationToken, et CancellationTokenSource.

Pour plus d’informations, consultez Modèles de programmation parallèle : Présentation et application de modèles parallèles avec .NET Framework 4.

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

Titre Descriptif
Guide pratique pour écrire une boucle Parallel.For simple Décrit comment écrire une For boucle sur n’importe quel tableau ou collection source indexable IEnumerable<T> .
Guide pratique pour écrire une boucle Parallel.ForEach simple Explique comment écrire une boucle ForEach sur toute collection source IEnumerable<T>.
Comment : arrêter ou interrompre une boucle Parallel.For Décrit comment arrêter ou interrompre une boucle parallèle afin que tous les threads soient informés de l’action.
Guide pratique pour écrire une boucle Parallel.For avec des variables Thread-Local Décrit comment écrire une For boucle dans laquelle chaque thread gère une variable privée qui n’est pas visible par d’autres threads et comment synchroniser les résultats de tous les threads une fois la boucle terminée.
Guide pratique pour écrire une boucle Parallel.ForEach avec des variables Partition-Local Décrit comment écrire une ForEach boucle dans laquelle chaque thread gère une variable privée qui n’est pas visible par d’autres threads et comment synchroniser les résultats de tous les threads une fois la boucle terminée.
Procédure : annuler une boucle Parallel.For ou ForEach Décrit comment annuler une boucle parallèle à l’aide d’un System.Threading.CancellationToken
Guide pratique : 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 (TPL) Fournit une vue d’ensemble de la bibliothèque parallèle de tâches.
Programmation Parallèle Introduit la programmation parallèle dans .NET Framework.

Voir aussi