Le Multithreading améliorations .NET 4
J'ai entendu dire que l' .NET 4 est ajouté à l'équipe de nouvelles classes dans le cadre qui rendent le travail avec les threads meilleure et plus facile.
Fondamentalement, la question est de savoir quelles sont les nouvelles façons d'exécuter multithread tâches ajouté .NET 4 et quels sont-ils conçus pour être utilisés?
UPD: Juste pour que ce soit clair, je ne suis pas à la recherche pour un seul façon d'exécuter des tâches parallèles dans .NET 4, je veux savoir qui sont les nouveaux ajoutés, et si possible quelle situation serait chaque de leur convient le mieux..
Vous devez vous connecter pour publier un commentaire.
Avec l'absence de réponses, j'ai décidé d'évaluer les réponses ci-dessous avec ce que j'ai appris..
Comme @Scott a déclaré:.NET 4 a ajouté la Task Parallel Library qui ajoute un certain nombre d'innovations, de nouvelles méthodes et approches pour le parallélisme.
Parallel.For
etParallel.ForEach
méthodes, qui permettent au développeur de traiter plusieurs éléments en plusieurs threads. Le Cadre, dans ce cas, décidez combien de fils sont nécessaires, et quand créer de nouveaux threads, et quand ne pas.C'est très simple et directe de paralléliser le code existant, et ajouter un peu de boost de performance.
.Where
clause, par exemple, se déroulera dans plusieurs threads maintenant!Task
classe. À certains égards, il peut ressembler à de la déjà bien connueThread
classe, mais il faut profiter de la nouvelle Pool de Threads .NET 4 (qui a été beaucoup amélioré par rapport à de précédentes versions), et est beaucoup plus fonctionnel que leThread
classe. Par exemple, vous pouvez enchaîner les Tâches où des tâches dans le milieu de la chaîne ne démarre que lorsque les précédents terminer. Des exemples et des explications approfondies dans un screencast sur Canal 9BlockingCollection<>
. Cela fonctionne parfaitement dans le cas où vous disposez d'un producteur-consommateur scénario. Vous pouvez avoir plusieurs threads de la production de certains objets, qui seront ensuite consommés et transformés par le consommateur méthodes. Cela peut facilement être parallélisé et contrôlé avec la Tâche de l'usine et le blocage de la collection. Utile screencast avec des exemples de Canal 9Ceux-ci peuvent également utiliser différents sauvegarde des classes de stockage (ConcurrentQueue, ConcurentStack, ConcurrentBag), qui sont tous les thread-safe, et sont différentes en fonction de l'élément de commande et de performance. Des exemples et des explications dans un autre vidéo ici
CountdownEvent
classe, qui peut nous aider à "la coordination des tâches des scénarios" (c). Fondamentalement, nous permet d'attendre jusqu'à ce que toutes les tâches parallèles sont finis. Screencast avec exemple d'utilisation sur Canal 9Vous pouvez voir un certain nombre de screencasts et des vidéos sur le Canal 9 qui sont marqués avec le "Calcul Parallèle"
Oui, .NET 4 a ajouté le Task Parallel Library qui, à un haut niveau, ajoute le support pour:
Parallel.For
etParallel.ForEach
Parallel.Invoke
ou laTask
classeDe répondre à la mise à jour à la question de départ...
Le TPL est le préféré écriture, en parallèle des tâches à l'aide .NET 4. Vous pouvez toujours créer threadpool vous-même, et de faire tous de la même "manuel" thread de techniques que vous pouvez avant. La chose à garder à l'esprit est que l'ensemble du pool de threads (et à peu près tout ce que le filetage liées) a été réécrit pour tirer parti de la TPL. Cela signifie que même si vous créez un pool de threads de l'élément de vous-même vous même à l'aide de la TPL, même si vous ne le connaissez pas. L'autre chose à garder à l'esprit est que les TPL est beaucoup plus optimisé, et à l'échelle de façon plus appropriée, sur la base du nombre de processeurs disponibles.
Quant à savoir ce que la situation de chacun d'entre eux serait le mieux adapté, il n'y a pas de "silver bullet" réponse. Si vous avez déjà été mise en queue de votre propre pool de threads (ou sinon de faire quelque chose de multi-thread), vous pouvez modifier la partie de votre code pour utiliser le TPL sans conséquences.
Pour des choses comme les boucles parallèles ou des requêtes en parallèle, vous devrez analyser le code et l'exécution de ce code pour déterminer s'il convient d'être parallélisé.
Strictement parlant, il s'agit de C# 4.0 et pas une nouvelle classe, mais les événements maintenant ont une forme plus intelligente de verrouillage qui, si j'ai bien compris la modification correctement, supprime la nécessité pour reems de code de verrouillage comme indiqué ci-dessous (tiré de cet article par Jon Skeet):