Nous avons une application .NET qui effectue plusieurs appels simultanés à divers services Web, recueille leurs réponses et fait quelques calculs hors de ces réponses. En essayant de dériver des performances supplémentaires, j'ai étudié l'utilisation des approches qui utilisent le thread d'E/S .NET via l'utilisation de ports d'achèvement d'E/S. J'ai lu plusieurs ressources, y compris le récent livre de Joe Duffy, Concurrent Programming sur Windows, et même si j'obtiens leur utilité, je ne suis pas très clair sur leur comportement au sein de .NET et je cherche une explication concise.Comment .NET utilise-t-il des threads IO ou des ports d'achèvement d'E/S?
Répondre
Il est possible que vous n'ayez rien à faire si vous utilisez déjà les méthodes asynchrones. Selon la technologie que vous utilisez pour l'appel au service Web, en fin de compte, il va tomber à l'API Win32 pour faire l'appel pour obtenir des octets à partir du réseau, et à cette fin, il utilisera l'achèvement des E/S Ports afin de gérer les appels asynchrones. Le principe de base derrière les ports d'achèvement d'E/S est qu'en attendant les opérations d'E/S, il existe un pool d'unités d'exécution qui attend que les opérations d'E/S se terminent (en supposant que vous vous soyez enregistré pour utiliser E/S ports). Une fois l'opération enregistrée terminée, le thread du pool de threads du port d'achèvement d'E/S est utilisé pour gérer le rappel.
Bien sûr, après avoir appelé le port de complétion d'E/S, votre thread peut passer à autre chose, ou se terminer, le choix vous appartient.
Ce qui suit devrait aider à décrire plus:
E/S achèvement Ports:
http://msdn.microsoft.com/en-us/library/aa365198(VS.85).aspx
Ports d'achèvement intérieur I/O (WayBack Machine):
Le peu sur une piscine partagée faisant du travail alors que l'IO est éteint dans IO land était exactement ce que j'espérais. Merci pour l'explication. –
- 1. Synchronisation des threads COM avec .NET
- 2. Comment créer des ports COM virtuels
- 3. Débogage des threads C#
- 4. Comment créer des threads démon?
- 5. Interruption des threads natifs
- 6. Comment verrouiller la console sur des threads dans C# .NET?
- 7. Comment tester la sécurité des threads
- 8. Planification des threads Swingworker
- 9. Énumération des threads dans Windows
- 10. Flux C++ Boost io, gestion des erreurs
- 11. Les clients proxy ASMX ou WCF utilisent-ils des ports d'achèvement d'E/S?
- 12. Utilisation des threads en C++
- 13. Advanced Console IO in .NET
- 14. Auto-réparation des threads Python
- 15. Indy, envoyer des threads et des contextes détruits
- 16. Comment ouvrir par programme des ports sur des appliances de pare-feu?
- 17. Comment synchroniser les données reçues des pièces distantes connectées par des ports série
- 18. python, affaire amusante avec des threads et des IDEs?
- 19. Pourquoi certains commutateurs ont-ils des ports de liaison montante?
- 20. Comment attacher des propriétés (à travers l'infrastructure .NET ou autre)
- 21. JVM Thread dumps contenant des moniteurs sans verrouillage des threads
- 22. C# 1.1: Surveillance des threads de travail
- 23. Clustering utilisant des threads en Java
- 24. Méthodes statiques et sécurité des threads
- 25. Java: synchronisation des threads sur plusieurs serveurs
- 26. Familiarisation des threads avec Windows 2003 SP2
- 27. GMail SMTP via des erreurs C# .Net sur tous les ports
- 28. gestion des connexions db sur daemonize threads
- 29. Comment transmettre des variables ou des paramètres à un package à partir de .NET?
- 30. Le partage des ports série (protocole modem + dialer)
Peut-être d'intérêt: http://marcgravell.blogspot.com/2009/02/async-without-pain.html –