4 Stimmen

In welchem Thread-Kontext werden die SendAsync- und ReceiveAsync-Callbacks von .NET 3.5 ausgeführt?

Verwenden SendAsync und ReceiveAsync IO-Abschlussports?

2voto

Ana Betts Punkte 72423

Nun, IO Completion Ports funktionieren, indem sie die Completion Routine als APC an einen Worker Thread in Ihrem ThreadPool (SocketAsyncEventArgsPool) übergeben. Also, die Kontext ist ein Worker-Thread, der erstellt wurde.

Was Ihre eigentliche Frage betrifft, so kann ich mir nicht vorstellen, dass sie etwas anderes als E/A-Abschlussports verwenden würden, da es sonst sehr ineffizient wäre; dies ist jedoch hauptsächlich ein Implementierungsdetail - unabhängig von wie sie es tun, ist die Realität, dass die Benachrichtigung in einem willkürlichen Kontext erfolgt (d.h. Sie wissen nada in welchem Thread Sie sich befinden), daher müssen Sie in Ihrer Abschlussroutine die Dinge auf eine thread-sichere Art und Weise erledigen.

Für eine gute Skalierbarkeit würde ich auch versuchen, die Arbeit in dieser Routine zu minimieren, schließen Sie die E/A so schnell wie möglich - wenn Sie andere Arbeit zu tun haben, verwenden Sie einen separaten Thread-Pool, die Sie die eigentliche Berechnung auf Warteschlange können.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X