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

- [SharePoint] Les sessions TechDays 2012… par Le blog de Patrick [MVP SharePoint] le il y a 2 heures et 21 minutes

- TechDays Paris 2012 : Session pleinière jour 3 par Blog Technique de Romelard Fabrice le 02-09-2012, 11:01

- Mishra Reader : un lecteur RSS très Zune Style en Open Source ! par Cyril Sansus le 02-09-2012, 08:28

- [framework 4] Les Tasks et le Thread UI par Fathi Bellahcene le 02-09-2012, 00:33

- Workflow Foundation 3 a un pied dans la tombe par Blog de Jérémy Jeanson le 02-08-2012, 22:15

- TechDays Paris 2012 : Nouvelles tendances du poste de travail - Bring Your own PC par Blog Technique de Romelard Fabrice le 02-08-2012, 19:42

- TechDays Paris 2012 : System Center Service Manager 2012 Vue d’ensemble par Blog Technique de Romelard Fabrice le 02-08-2012, 17:32

- TechDays Paris 2012 : Pleinière second jour par Blog Technique de Romelard Fabrice le 02-08-2012, 16:23

- TechDays Paris 2012 : Retour d'expérience sur la mise en place d'un Cloud Privé par Blog Technique de Romelard Fabrice le 02-08-2012, 16:04

- TechDays Paris 2012 : Comment SharePoint a sauvé mes TechDays par Blog Technique de Romelard Fabrice le 02-07-2012, 23:59