127 votes

Quand utiliser le pool de threads en C# ?

J'ai essayé d'apprendre la programmation multithread en C# et je ne sais pas quand il est préférable d'utiliser le pool de threads ou de créer mes propres threads. Un livre recommande d'utiliser le pool de threads uniquement pour les petites tâches (quoi que cela veuille dire), mais je n'arrive pas à trouver de véritables directives. Quelles sont les considérations que vous utilisez pour prendre cette décision de programmation ?

6voto

mancaus Points 2266

Méfiez-vous du pool de threads de .NET pour les opérations susceptibles de se bloquer pendant une partie significative, variable ou inconnue de leur traitement, car il est sujet à la privation de threads. Envisagez d'utiliser les extensions parallèles de .NET, qui fournissent un bon nombre d'abstractions logiques sur les opérations threadées. Elles comprennent également un nouveau planificateur, qui devrait constituer une amélioration par rapport à ThreadPool. Voir ici

3voto

Thomas Bratt Points 10738

L'une des raisons d'utiliser le pool de threads pour les petites tâches uniquement est qu'il existe un nombre limité de threads de pool. Si l'un d'entre eux est utilisé pendant une longue période, ce thread ne peut plus être utilisé par d'autres programmes. Si cela se produit plusieurs fois, le pool de threads peut s'épuiser.

L'utilisation du pool de threads peut avoir des effets subtils - certains timers .NET utilisent les threads du pool de threads et ne se déclenchent pas, par exemple.

3voto

Bill Points 343

Si vous avez une tâche d'arrière-plan qui va durer longtemps, par exemple pendant toute la durée de vie de votre application, il est raisonnable de créer votre propre thread. Si vous avez des tâches courtes qui doivent être effectuées dans un thread, alors utilisez le pooling de threads.

Dans une application où vous créez de nombreux threads, les frais généraux de création des threads deviennent substantiels. L'utilisation du pool de threads crée les threads une fois et les réutilise, évitant ainsi la surcharge liée à la création des threads.

Dans une application sur laquelle j'ai travaillé, le fait de passer de la création de threads à l'utilisation du pool de threads pour les threads de courte durée a vraiment amélioré le fonctionnement de l'application.

1voto

lajos Points 13791

Les pools de threads sont très utiles lorsque vous avez plus de tâches à traiter que de threads disponibles.

Vous pouvez ajouter toutes les tâches à un pool de threads et spécifier le nombre maximum de threads qui peuvent fonctionner à un moment donné.

Vérifiez ce sur MSDN : http://msdn.microsoft.com/en-us/library/3dasc8as(VS.80).aspx

1voto

JeffFoster Points 354

Utilisez toujours un pool de threads si vous le pouvez, travaillez au niveau d'abstraction le plus élevé possible. Les pools de threads cachent la création et la destruction des threads pour vous, ce qui est généralement une bonne chose !

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