2009-02-12 4 views
29

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?

+1

Könnte von Interesse sein: http://marcgravell.blogspot.com/2009/02/async-without-pain.html –

Antwort

25

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):

https://web.archive.org/web/20101101112358/http://doc.sch130.nsc.ru/www.sysinternals.com/ntw2k/info/comport.shtml

+0

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. –