33 votes

Threading et traitement parallèle

Microsoft .NET 4.0 introduit de nouvelles "améliorations parallèles" à son cadre. Je me demande quelle est la différence entre une application qui utilise les fonctions standard de System.Threading et les nouvelles améliorations parallèles.

40voto

Aaronaught Points 73049

La différence la plus importante entre les extensions parallèles et le threading classique est probablement le flux de contrôle.

Un fil, créé à l'aide de new Thread(...) o ThreadPool.QueueUserWorkItem se terminera à un moment complètement indéterminé dans le temps. Si vous écrivez ce code :

ThreadPool.QueueUserWorkItem(() =>
    {
        Thread.Sleep(1000);
        Console.WriteLine("Work Finished");
    });
Console.WriteLine("Item Queued");

Le texte Item Queued apparaîtra tout de suite, et Work Finished sera imprimé après un délai d'environ 1 seconde.

D'autre part, si vous écrivez quelque chose de similaire en utilisant des extensions parallèles :

Parallel.For(0, 10, i =>
    {
        Thread.Sleep(1000);
        Console.WriteLine("Test {0}", i);
    });
Console.WriteLine("Finished");

Ce que vous verrez dans ce cas, c'est un délai d'une seconde avant que quelque chose ne se passe, puis une série de messages "Test" dans un ordre aléatoire, et puis le texte Finished .

En d'autres termes, l'exécution de tâches en parallèle ne modifie pas réellement le déroulement du programme. Il exécutera différentes tâches sur différents threads afin qu'elles puissent être exécutées sur plusieurs cœurs de CPU, dans le but d'améliorer le débit global du programme, mais pour le programmeur typique, ces tâches ne s'exécutent pas vraiment en "arrière-plan" comme elles le feraient avec un thread. Vous n'avez pas à modifier la structure de votre programme ou à faire quoi que ce soit de spécial pour être informé de la fin du travail. Vous n'avez aucun contrôle sur ce qui se passe à l'intérieur de le bloc parallèle, mais vous savez que le bloc ne rendra pas le contrôle tant que toutes les tâches parallèles ne seront pas terminées.

Bien que les extensions parallèles soient excellentes pour cela, il convient de mentionner que les PX ne sont d'aucune utilité lorsque l'on veut réellement besoin de pour exécuter une tâche en arrière-plan, comme la mise en œuvre d'un planificateur, ou la délégation à un fil de travail afin de maintenir une interface utilisateur réactive. Pour cela, vous devez toujours utiliser des threads ou des composants asynchrones.

5voto

Adam Driscoll Points 5117

Voici une bonne chaîne9 que j'ai regardée il y a quelque temps sur ce sujet : http://channel9.msdn.com/posts/philpenn/Parallel-Programming-with-NET-Parallel-Extensions/

1voto

Brian Rasmussen Points 68853

Le cadre parallèle utilise le modèle de filetage .NET qui, à son tour, s'appuie sur le modèle de filetage de Windows. Cependant, de nombreuses optimisations ont été réalisées dans le cadre général afin de rendre la bibliothèque parallèle plus efficace.

Ce blog a des détails supplémentaires.

-4voto

J-16 SDiZ Points 14191

Le traitement parallèle n'est qu'une interface sophistiquée pour la création automatique de fils. Il est plus facile d'utiliser l'extension de traitement parallèle pour la plupart des tâches.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X