Bienvenue à Blogs CodeS-SourceS Identification | Inscription | Aide

Cyril Sansus

WPF, Interfaces Utilisateurs et .NET
Thread ou ThreadPool ?

L'asynchronisme est quelque chose de complexe : la bonne technique (Thread, ThreadPool, ...), la synchronisation, la concurrence, etc. Il existe de nombreux ouvrages à ce sujet mais certaines règles très simples peuvent vous faciliter le travail.

La question qui aujourd’hui m’intéresse est : Thread ou ThreadPool ? Voici quelques règles qui pourront, peut être, vous aidez dans ce choix.

On préconise souvent d’utiliser directement un Thread (l’artillerie lourde) :

  • Lors de tâches très longues. L’exemple parfait est une boucle “infinie” qui attend les connexion d’un client sur une socket.
  • Pour avoir plus de contrôle sur le Thread : attente, destruction, affinité, priorité …

Pour le reste on passera toujours par des ThreadPool (soit 95% des cas) :

  • Pour des tâches courtes
  • Des opérations d’I/O

D’ailleurs dans le Framework on retrouve très fréquemment le ThreadPool :

  • Délégués asynchrones
  • BackgroundWorker
  • Méthodes Begin* et End*
  • La plupart des I/O

Autre point : les performances.

J’ai réalisé un test qui vise à mesurer le temps de création de 1000 tâches. Dans un premier cas cela se traduira par le démarrage de 1000 Thread, et dans second cas l’exécution de 1000 workitems.

// 1er cas : Thread
Thread thread = new Thread(DoWork);
thread.Start();

// 2nd cas : ThreadPool
ThreadPool.QueueUserWorkItem(new WaitCallback((state) =>
{
}));


Les résultats (En release sur un Duo Core 2.2Ghz) sont parlants :

  • 230 ms pour le premier cas.
  • 0 ms pour le second.

Cela s’explique par le fait que créer un Thread n’est pas anodin : cela consomme beaucoup de ressources et prend du temps.

Le ThreadPool prépare un ensemble de Threads prêt à être utilisés, donc pas de temps de création. De plus, dès qu’un Thread du pool a fini d’exécuter son WorkItem, il sera réutilisé par un autre WorkItem réduisant ainsi la consommation de ressources.

Ce post vous a plu ? Ajoutez le dans vos favoris pour ne pas perdre de temps à le retrouver le jour où vous en aurez besoin :
Posted: mercredi 16 septembre 2009 17:50 par Vko

Commentaires

Pas de commentaires

Les commentaires anonymes sont désactivés

Les 10 derniers blogs postés

- Kinect 1.5 is out ! par Cyril Sansus le 05-21-2012, 17:47

- Les actualités de la semaine sur c2i.fr (14 mai - 20 mai) par Richard Clark le 05-21-2012, 08:50

- Reactive Extensions : Consommer des services avec Rx Partie 3, les pièges à éviter par Léonard Labat le 05-20-2012, 23:45

- SharePoint Blog Site, problème d’archives par Le Blog (Vert) d'Arnaud JUND le 05-20-2012, 13:09

- Soirée ALT.NET Mai - 3 présentations par #Rui le 05-18-2012, 11:59

- [ #SharePoint 2010][ #SQLServer 2012] AlwaysOn pour SharePoint (2/4) : Configuration (2e partie)… par Le blog de Patrick [MVP SharePoint] le 05-18-2012, 11:31

- Team Foundation Server 11: tous les trésors cachés du site d’équipe par Philess le 05-16-2012, 19:01

- [PowerShell 3] Télécharger et installer la documentation en ligne par Blog de SPBrouillet (Pierrick BROUILLET) le 05-16-2012, 17:36

- [#SharePoint 2010][#SQLServer 2012] AlwaysOn pour SharePoint (1/4) : Configuration (1ère partie)… par Le blog de Patrick [MVP SharePoint] le 05-16-2012, 12:10

- Job Day @MIC Brussels - .Net Developers on Mobile applications par Le Blog (Vert) d'Arnaud JUND le 05-15-2012, 20:26