Qu’est-ce qu’un pool de fils ? Pourquoi utiliser des pools de threads ? Comment utiliser les pools de fils ?
1. Qu’est-ce qu’un pool de fils ?
La classe ThreadPool du .NET Framework fournit un pool de threads pouvant être utilisé pour exécuter des tâches, envoyer des éléments de travail, gérer les E/S asynchrones, attendre au nom d’autres threads et gérer les minuteurs. Alors, qu’est-ce qu’un pool de fils ? Le pool de threads est en réalité un « pool » qui stocke des objets thread, et il fournit quelques méthodes de base, comme définir le nombre minimum/maximum de threads dans le pool, mettre en file d’attente les méthodes à exécuter, etc. ThreadPool est une classe statique, donc elle peut être utilisée directement sans créer d’objets.
2. Pourquoi utiliser des pools de fils ? Quels sont les avantages ?
Le site officiel de Microsoft indique ceci : De nombreuses applications créent un grand nombre de fils de discussion qui sont en veille, attendant que les événements se produisent. Il existe aussi de nombreux fils qui peuvent entrer en hibernation juste pour se réveiller périodiquement afin de vérifier des informations d’état modifiées ou mises à jour. Pools de threads, ce qui vous permet d’utiliser les threads plus efficacement via un pool de threads travailleurs géré par le système.
Pour faire simple, chaque nouveau thread doit occuper de l’espace mémoire et d’autres ressources, et avec autant de nouveaux threads, beaucoup sont en dormance ou en attente de la libération de ressources. Il existe de nombreux threads qui ne font qu’un petit travail périodiquement, comme rafraîchir des données, etc., et qui sont trop gaspilleurs à dessiner, et il est rare qu’un grand nombre de threads explosent en programmation réelle puis se terminent en peu de temps. C’est pourquoi le concept de pools de threads a été proposé. Si l’application effectue une nouvelle requête au pool de threads, le thread en état d’attente est activé et exécute la tâche sans créer de nouveau thread, ce qui évite beaucoup de surcharge. Le système ne détruira automatiquement les threads que lorsque le nombre de threads atteint le maximum de threads. Ainsi, l’utilisation de pools de threads peut éviter d’importants coûts de création et de destruction, offrir de meilleures performances et stabilité, et deuxièmement, les développeurs peuvent se concentrer sur d’autres tâches en confiant les threads à la gestion système.
3. Comment utiliser les pools de fils ?
En fait, les pools de threads sont très simples à utiliser, comme suit
a. Définir le pool de threads maximal et minimal :
ThreadPool.SetMaxThreads (int workerThreads,int completionPortThreads) Définissez le nombre de requêtes pour un pool de threads pouvant être actifs en même temps. Toutes les requêtes supérieures à ce nombre resteront en file d’attente jusqu’à ce que le fil du pool de threads soit disponible. Vous pouvez aussi définir le nombre minimum de threads.
b. Ajouter des tâches au pool de threads :
ThreadPool.QueueUserWorkItem(nouveau WaitCallback(nom de la méthode)) ;
ou ThreadPool.QueueUserWorkItem (nouveau WaitCallback (nom de la méthode), paramètre) ;
Par exemple, si un maximum de 5 threads dans le pool de threads exécute une méthode 60 fois, le salaire total sur 5 ans est le suivant :
Si vous n’utilisez pas le pooling de threads, vous devrez peut-être ouvrir 60 threads pour exécuter la méthode Run() de manière asynchrone, ce qui est un gaspillage de ressources d’espace. Nous utilisons maintenant jusqu’à 5 threads, qui peuvent être exécutés en 1 seconde, et l’efficacité ainsi que les performances sont très bonnes.
|