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 ?
Réponses
Trop de publicités?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
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.
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.
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