Wir haben eine .NET-Anwendung, die mehrere gleichzeitige Aufrufe an verschiedene Webdienste durchführt, ihre Antworten sammelt und dann einige Berechnungen für diese Antworten durchführt. Bei dem Versuch, zusätzliche Leistung abzuleiten, habe ich die Verwendung von Ansätzen untersucht, die .NET IO-Threading über die Verwendung von IO-Completion-Ports nutzen. Ich habe mehrere Ressourcen gelesen, einschließlich Joe Duffys jüngstes Buch Concurrent Programming unter Windows, und während ich ihre Nützlichkeit "verstehe", bin ich ein wenig unklar bezüglich ihres Verhaltens innerhalb von .NET und bin auf der Suche nach einer kurzen Erklärung.Wie verwendet .NET IO Threads oder IO Completion Ports?
Antwort
Wahrscheinlich müssen Sie nichts tun, wenn Sie die asynchronen Methoden bereits verwenden. Abhängig von der Technologie, die Sie für den Aufruf des Webdienstes verwenden, wird es letztendlich zur Win32-API geleitet, um den Aufruf zum Abrufen von Bytes aus dem Netzwerk durchzuführen. Zu diesem Zweck wird die E/A-Vervollständigung verwendet Ports, um asynchrone Aufrufe zu verarbeiten. Die Grundvoraussetzung hinter E/A-Abschlussports ist, dass beim Warten auf E/A-Vorgänge ein Thread-Pool auf den Abschluss der E/A-Vorgänge wartet (vorausgesetzt, Sie haben sich für die E/A-Vervollständigung registriert) Häfen). Wenn der registrierte Vorgang abgeschlossen ist, wird der Thread aus dem E/A-Completion-Port-Thread-Pool zur Verarbeitung des Rückrufs verwendet.
Natürlich, nach dem Aufruf der I/O Completion-Port, kann Ihr Thread weitermachen, um mehr Arbeit zu tun, oder zu beenden, die Wahl liegt bei Ihnen.
Folgendes sollte es helfen, beschreiben mehr:
I/O Completion Ports:
http://msdn.microsoft.com/en-us/library/aa365198(VS.85).aspx
Innen I/O Completion Ports (Wayback Machine):
Das bisschen über Ein gemeinsamer Pool, der während der IO im IO-Land arbeitete, war genau das, was ich mir erhofft hatte. Danke für die Erklärung. –
- 1. Verständnis IO Completion Ports
- 2. IO-Completion-Ports für den gleichzeitigen Datenbankzugriff
- 3. Haskell, wie IO IO Monad
- 4. Was passiert mit Win32 IO Completion Port und synchron erscheinendem IO?
- 5. Apache Commons IO in .Net
- 6. .NET IO Exception "Invalid Signature"
- 7. Beinhaltet Socket IO Disk IO?
- 8. Advanced Console IO in .NET
- 9. IO Completion-Port Initial lesen und bidirektionaler Daten
- 10. Python-Anfragen - Threads/Prozesse vs. IO
- 11. Filter IO [Maybe String] zu IO [String]
- 12. Haskell Monade: IO [Double] bis [IO Double]
- 13. Winkel-socket-io io ist nicht
- 14. ffmpeg async io?
- 15. Welcher Prozess verwendet alle meine Festplatte IO
- 16. Wildfly: Wie Worker-Threads in IO-Subsystem dynamisch
- 17. Synchronisieren und IO-Datei
- 18. Welche IO-Aktivität unterstützt der GHC IO-Manager?
- 19. Unterschied zwischen asynchronen und asynchronen io-Anrufen in .net
- 20. Warum/wie funktioniert rekursives IO?
- 21. Eine Liste von IO Float zusammenfassen: [IO Float] in Haskell
- 22. Warum gibt es eine verschachtelte IO-Monade, IO (IO()), als Rückgabewert meiner Funktion?
- 23. Idiomatische IO mit Skala
- 24. Cloud9 IO Deaktivierung Tastenbindungen oder Cloud9 Alternative
- 25. , was der Unterschied zwischen Speicher gemappt io ist und io io
- 26. Golang io/ioutil NopCloser
- 27. Haskell Weg zu [IO String] in IO String
- 28. Was blockiert in einfachen Worten IO und nicht-blockierende IO?
- 29. Konvertiere [IO Int] zu IO [Int] in Haskell?
- 30. Datensatzaktualisierungsfehler in IO Monad?
Könnte von Interesse sein: http://marcgravell.blogspot.com/2009/02/async-without-pain.html –