Verwenden SendAsync und ReceiveAsync IO-Abschlussports?
Antwort
Zu viele Anzeigen?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.