ThreadPool.QueueUserWorkItem vs Tâche.Usine.StartNew
quelle est la différence entre le dessous de
ThreadPool.QueueUserWorkItem
vs
Task.Factory.StartNew
Si le code ci-dessus est appelé à 500 fois pour certaines tâches en cours d'exécution signifie-t-il tous les threads du pool de threads seront prises jusqu'?
Ou va TPL (2ème option) être assez intelligent pour faire de threads inférieur ou égal au nombre de processeurs?
Vous devez vous connecter pour publier un commentaire.
Si vous allez commencer un travail de longue haleine avec TPL, vous devez spécifier
TaskCreationOptions.LongRunning
, ce qui signifie qu'il n'est pas programmer sur le fil de la piscine. (EDIT: Comme indiqué dans les commentaires, ce est un planificateur de décision spécifique, et n'est pas une garantie, mais j'espère que tout sensible planificateur de la production permettrait d'éviter de planification à long tâches en cours d'exécution sur un pool de threads.)Vous ne devriez pas l'annexe d'un grand nombre de long-tâches en cours d'exécution sur le pool de threads vous-même. Je crois que ces jours la taille par défaut du pool de threads est assez grand (parce que c'est souvent abusé de cette façon), mais fondamentalement, ça ne devrait pas être utilisé comme cela.
Le point de le pool de threads est pour éviter court tâches de prendre un grand coup de créer un nouveau thread, en comparaison avec le temps, ils sont effectivement en cours d'exécution. Si la tâche va être en cours d'exécution pendant une longue période, l'impact de la création d'un nouveau fil de discussion sera relativement faible de toute façon - et vous ne voulez pas finir potentiellement en cours d'exécution hors du pool de threads. (Il est moins probable aujourd'hui, mais je ne expérience sur des versions antérieures de .NET.)
Personnellement si j'en avais la possibilité, je serais certainement utiliser TPL au motif que la
Task
API est assez agréable - mais ne n'oubliez pas de dire TPL que vous attendez de la tâche à exécuter pendant une longue période.EDIT: Comme indiqué dans les commentaires, voir également le PFX équipe du blog sur le choix entre le TPL et le pool de threads:
EDIT: d'après les commentaires, n'oubliez pas que TPL vous permet d'utiliser personnalisé planificateurs, si vous voulez vraiment...
TaskCreationOptions.LongRunning
évitera toujours le fil de la piscine. Il semble être plus d'une directive qu'une mise en œuvre de la garantie. Suis-je à côté de la base à qui?