Unterschied zwischen asynchronen und asynchronen io-Aufrufen in .net

8

Mit einem Delegaten kann ich jede Funktion asynchron aufrufen. Aus der Dokumentation verstehe ich, dass dies getan wird, indem ein Workitem für den Threadpool in die Warteschlange gestellt wird.

Man kann auch asynchrone Aufrufe von IO-Funktionen machen (wie das Lesen von Sockets, Dateien, Webseiten usw.). Ich denke (aber ich bin mir nicht sicher), dass dies kein Workitem im Threadpool erzeugt. Erst nachdem das Ergebnis erhalten wurde (oder ein Fehler), wird der Callback von einem neuen Thread im Threadpool aufgerufen.

Stimmt diese Annahme? Oder ist ein asynchroner IO-Aufruf, auch unter dem Deckblatt nur ein Thread, der erzeugt wird? Und wenn das der Fall ist, wie können asynchrone Aufrufe besser performant sein als das Erstellen von Threads (mithilfe eines Threadpools) und das Blockieren?

auch: Wie viele asynchrone Anrufe kann man zu einem bestimmten Zeitpunkt bearbeiten? Wenn ein Threadpool verwendet wird, denke ich, soviel du willst. Aber gibt es bei asynchronen IO-Anrufen ein Limit? Und ist es so, woher weißt du, was die Grenze ist?

    
Toad 05.03.2010, 08:37
quelle

1 Antwort

7

Asynchronous IO ist viel komplizierter als nur einen anderen Thread aus dem Thread-Pool zu verwenden.

Es gibt viele verschiedene Techniken in OS , die asynchrone IO unterstützen:

1 Signalisierung eines Gerätekernelobjekts

Nicht geeignet zum Ausführen mehrerer simultaner E / A-Anforderungen für ein einzelnes Gerät. Ermöglicht einem Thread die Ausgabe einer E / A-Anforderung und ein anderer Thread die Verarbeitung.

2 Signalisierung eines Ereignis-Kernel-Objekts

Ermöglicht mehrere gleichzeitige E / A-Anforderungen für ein einzelnes Gerät. Ermöglicht einem Thread die Ausgabe einer E / A-Anforderung und ein anderer Thread die Verarbeitung.

3 Verwenden von alarmierbaren E / A

Ermöglicht mehrere gleichzeitige E / A-Anforderungen für ein einzelnes Gerät. Der Thread, der eine E / A-Anforderung ausgegeben hat, muss sie ebenfalls verarbeiten.

4 Verwenden von I / O-Completion-Ports

Ermöglicht mehrere gleichzeitige E / A-Anforderungen für ein einzelnes Gerät. Ermöglicht einem Thread die Ausgabe einer E / A-Anforderung und einem anderen Thread zur Verarbeitung. Diese Technik ist hochgradig skalierbar und bietet die größte Flexibilität.

    
Sergey Teplyakov 05.03.2010, 08:58
quelle

Tags und Links