153 votes

Vs thread ThreadPool

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.

128voto

Karg Points 585

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.

17voto

Martin Points 3552

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.

6voto

biozinc Points 2760

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.

2voto

MSalters Points 74024

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X