70 votes

C # - ThreadPool vs tâches

Comme certains l’ont peut-être vu dans .NET 4.0, ils ont ajouté un nouvel espace de nom System.Threading.Tasks qui correspond en gros à ce que signifie, une tâche. Je ne l'utilise que depuis quelques jours, après avoir utilisé ThreadPool.

Lequel est le plus efficace et le moins consommateur de ressources? (Ou simplement mieux dans l'ensemble?)

27voto

Jeremy McGee Points 13826

L'objectif des Tâches de l'espace de noms est de fournir une architecture enfichable de faire du multi-tâches des applications plus faciles à écrire et plus souple.

La mise en œuvre utilise un TaskScheduler objet pour contrôler la gestion de tâches. Cela a des méthodes virtuelles que vous pouvez modifier pour créer votre propre tâche de manutention. Les méthodes comprennent, par exemple

protected virtual void QueueTask(Task task)
public virtual int MaximumConcurrencyLevel

Il y aura une petite surcharge à l'aide de la valeur par défaut de mise en œuvre, car il y a un wrapper autour de la .NET threads mise en oeuvre, mais je n'avais pas s'attendre à être énorme.

Il y a un (projet de) la mise en œuvre d'une coutume TaskScheduler qui implémente plusieurs tâches sur un seul thread ici.

21voto

Henk Holterman Points 153608

lequel est le plus efficace et le moins consommateur de ressources?

Peu importe, il y aura très peu de différence.

(Ou simplement mieux dans l'ensemble)

La classe Task sera la plus facile à utiliser car elle offre une interface très propre pour le démarrage et la jonction de threads, ainsi que pour le transfert des exceptions. Il prend également en charge une forme (limitée) d'équilibrage de charge.

17voto

Ivan Ičin Points 1133

"À partir de .NET Framework 4, la TPL est le moyen privilégié pour écrire du code multithread et parallèle."

http://msdn.microsoft.com/en-us/library/dd460717.aspx

6voto

Mickey Perlstein Points 642

La planification est un aspect important de tâches en parallèle.

Contrairement aux threads, les nouvelles tâches ne sont pas forcément d'exécution commence immédiatement. Au lieu de cela, ils sont placés dans une file d'attente de travail. Les tâches s'exécutent lorsque l'un de leurs associés planificateur de tâches retire de la file d'attente, généralement, que les noyaux deviennent disponibles. Le planificateur de tâches tente d'optimiser débit global en contrôlant le système du degré de simultanéité. Tant qu'il y aura assez de tâches et les tâches sont suffisamment libres de la sérialisation des dépendances, le rendement du programme des gammes avec le nombre de cœurs disponibles. De cette façon, les tâches incarnent le concept de potentiel de parallélisme

Comme je l'ai vu sur le site msdn http://msdn.microsoft.com/en-us/library/ff963549.aspx

3voto

Prashant Lakhlani Points 4182

Un autre bon point à considérer à propos de la tâche est que, lorsque vous utilisez ThreadPool, vous n’avez aucun moyen d’abandonner ou d’attendre les threads en cours d’exécution (à moins que vous ne le fassiez manuellement dans la méthode de thread), mais il est possible d’utiliser la tâche . Corrigez-moi si j'ai tort, s'il-vous plait

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