Quelle est la différence entre l’aide d’un nouveau thread et en utilisant un thread du pool de threads ? Quels avantages de performances sont là et pourquoi dois j’envisager d’utiliser un thread provenant du pool plutôt qu’un seul que j’ai créé explicitement ? Je pense plus précisément à .NET ici, mais les exemples généraux sont très bien.
Réponses
Trop de publicités?Pool de threads apportera des avantages à de fréquentes et relativement court opérations par
- Réutilisation des sujets qui ont déjà été créé au lieu d'en créer de nouvelles (un processus coûteux)
-
La limitation du taux de création de thread quand il ya une explosion de demandes de nouveaux éléments de travail (je crois que c'est seulement dans .NET 3.5)
Si vous la file d'attente de 100 pool de threads tâches, il n'utilisera autant de threads que ont déjà été créé pour le service de ces demandes (par exemple 10 par exemple). Le pool de threads va faire des vérifications fréquentes (je crois que toutes les 500ms en 3.5 SP1) et si il y a des tâches en file d'attente, il va faire un nouveau thread. Si vos tâches sont rapides, alors que le nombre de nouveaux threads de petites et de réutiliser les 10 ou si les threads pour les opérations de courte durée sera plus rapide que de créer des threads 100 à l'avant.
Si votre charge de travail a constamment un grand nombre de threads du pool de demandes en provenance, alors le fil de la piscine va se régler à votre charge de travail par la création de plus de threads dans la piscine par le processus ci-dessus de sorte qu'il ya un plus grand nombre de threads disponibles pour traiter les demandes
vérifiez Ici pour plus d'infos sur le pool de threads fonctions sous le capot
La création d'un nouveau thread-vous serait plus approprié si la tâche allait être relativement longues (probablement autour d'une seconde ou deux, mais il dépend de la situation spécifique)
@Krzysztof - le Pool de threads sont threads d'arrière-plan qui s'arrête lorsque le thread principal se termine. Créé manuellement les fils sont au premier plan par défaut (va continuer à courir après le thread principal est terminée), mais peut être réglé à fond avant d'appeler Démarrer sur eux.
L' .NET géré pool de threads: -
- Les tailles de lui-même basé sur la charge de travail actuelle et du matériel disponible
- Contient des threads de travail et de port d'achèvement fils (qui sont spécifiquement utilisé pour le service IO)
- Est optimisé pour un grand nombre de relativement courte durée des opérations
D'autres thread du pool, il existe des implémentations qui pourrait être plus approprié pour les opérations de longue durée.
Plus précisément, l'utilisation d'un pool de threads pour éviter que votre application à partir de la création de trop de threads. La caractéristique la plus importante d'un pool de threads est la file d'attente de travail. C'est, une fois que votre machine est suffisamment occupé, le pool de threads seront en file d'attente des demandes plutôt qu'immédiatement générer davantage de threads.
Donc, si vous allez créer un petit, limité le nombre de threads de créer vous-même. Si vous ne pouvez pas déterminer d'avance le nombre de threads peut être créé (par exemple, elles sont créées en réponse à la réception d'e / s), et leur travail sera de courte durée, utiliser le pool de threads. Si vous ne savez pas combien, mais leur travail sera de longue durée, il n'y a rien dans la plate-forme pour vous aider - mais vous pourriez être en mesure de trouver un autre pool de threads de mises en forme.
Recherchez ici un fil précédent :
http://StackOverflow.com/questions/10274/when-should-i-not-use-the-ThreadPool-in-net
Résumé, c’est que le pool de threads est bon si vous avez besoin pour se reproduire les nombreux fils de courte durée, alors que l’utilisation des Threads permet un contrôle un peu plus.
Stockage local des threads n’est pas une bonne idée avec des pools de threads. Il donne les discussions une « identité » ; pas toutes les discussions sont plus égales. Maintenant, pools de threads sont particulièrement utiles si vous avez juste besoin d’un tas de sujets identiques, prêt à faire votre travail sans frais de création.