437 votes

Quelle est la différence entre tâche et thread?

En C# 4.0, nous avons des Tâches dans le Système.Le filetage.Les tâches de l'espace de noms. Quelle est la vraie différence entre le Fil et la Tâche. J'ai fait quelques exemple de programme(d'aide prises à partir de MSDN) pour l'amour de moi de l'apprentissage avec

Parallel.Invoke 
Parallel.For 
Parallel.ForEach 

mais beaucoup de doutes que l'idée n'est pas si clair.

J'ai d'abord cherché dans Stackoverflow pour un même type de question, mais peut-être avec cette question du titre, je n'ai pas pu obtenir la même chose. Si quelqu'un connaît le même type de question d'être posté ici plus tôt, merci de donner la référence de la liaison.

531voto

Jörg W Mittag Points 153275

En informatique, un Task est un avenir ou une promesse. (Certaines personnes utilisent ces deux termes synomymously, certains les utilisent différemment, personne ne peut s'entendre sur un précis de la définition.) Fondamentalement, un Task<T> "promesses" de retour, vous avez un T, mais pas tout de suite ma chérie, je suis un peu occupé, pourquoi ne pas revenir plus tard?

Un Thread est l'un des nombreux moyens de remplir cette promesse. Mais pas tous l' Task besoin d'un Thread. Si la valeur que vous êtes en attente pour vient du système de fichiers ou une base de données ou du réseau, alors il n'est pas nécessaire pour un thread. L' Task peut-il suffit de s'inscrire à un rappel à la valeur lorsque le disque est en fait la recherche.

En particulier, l' Task ne pas dire pourquoi , c'est que cela prend beaucoup de temps pour retourner la valeur. Il pourrait être qu'il faut un long temps de calcul, ou il se pourrait que ça prend beaucoup de temps pour récupérer. Seulement dans le premier cas, utiliser un Thread pour exécuter un Task. (En .NET, les threads sont ridiculement cher, de sorte que vous devez généralement à éviter autant que possible et vraiment les utiliser uniquement si vous souhaitez exécuter plusieurs calculs sur plusieurs Processeurs. Par exemple, dans Windows, un thread pèse 12 KiByte (je pense), sous Linux, un thread pèse aussi peu que 4 KiByte, en Erlang/FAISCEAU, même à seulement 400 Octets. Dans .NET, c'est 1 MiByte!)

357voto

Mitch Wheat Points 169614

Une tâche est quelque chose que vous voulez faire.

Un thread est l'un des nombreux travailleurs possibles qui effectue cette tâche.

En termes .NET 4.0, une tâche représente une opération asynchrone. Thread (s) sont utilisés pour compléter cette opération en décomposant le travail en morceaux et en assignant des threads distincts.

17voto

NavaRajan Points 596

Les deux vidéos suivantes de canal-9 va vous donner une meilleure compréhension des Tâches Et des Threads et où devrions-nous utiliser.

http://channel9.msdn.com/blogs/bruceky/how-to-parallelize-your-application-part-2-theads-v-tasks http://channel9.msdn.com/blogs/bruceky/how-to-parallelize-your-application-part-3-using-tasks

Et si vous avez un peu plus de temps, alors commencez avec cette vidéo

http://channel9.msdn.com/blogs/bruceky/how-to-parallelize-your-application-part-1-why-do-it

6voto

Gryphes Points 21

vous pouvez utiliser Task de spécifier ce que vous voulez faire, puis joignez Task avec un Thread. de sorte qu' Task seraient exécutés dans ce nouveau Thread plutôt que sur le thread GUI. utiliser Task avec l' TaskFactory.StartNew(Action action) ici vous exécutez un délégué de sorte que si vous n'utilisez pas n'importe quel thread, il serait exécuté dans le même thread (thread GUI) si tu parles d'un fil, vous pouvez exécuter cette Task dans un thread différent. c'est un travail inutile car on peut exécuter directement le délégué ou l'attacher de délégué à un fil et les exécuter délégué dans ce thread. donc ne l'utilisez pas. c'est juste inutile. si vous avez l'intention d'optimiser votre logiciel c'est un bon candidat pour être enlevé. Veuillez noter que l' Action est delegate.

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