Frage

Eines der Merkmale von asynchroner Programmierung in .NET Threads während der langen laufenden Betrieb Ausführung zu speichern. Die FileStream Klasse eingerichtet werden kann asynchrone Operationen zu ermöglichen, dass ermöglicht (z), um eine Kopieroperation ausgeführt wird, ohne praktisch alle Threads. Zu meiner Überraschung fand ich, dass laufende Kopie asynchrone Stromes führt nicht nur langsamer, sondern nutzt auch mehr Rechenleistung als Synchron stream copy-äquivalent.

Gibt es ein Benchmark-Tests wurden ein synchrone vs asynchroner Betrieb Ausführung vergleichen getan (Datei, Netzwerk, etc.)? Ist es sinnvoll wirklich einen asynchronen Vorgang statt Spanning separaten Thread ausführen und einen synchronen Betrieb in Server-Umgebung durchzuführen, wenn die asynchrone Operation ist mal langsamer als die Synchron ein?

War es hilfreich?

Lösung

Eigentlich sind die Bedingungen, unter denen Datei i / o wird wirklich asynchron sind sehr spezifisch, auch in der nativen Win32-Ebene. Siehe diesen Artikel für weitere Details.

Andere Tipps

aus dem Artikel Zitieren Sie in Ihrem Kommentar aufgenommen @ Alex Antwort.

  

In Situationen, in denen eine E / A-Anforderung   erwartet, dass eine große Menge an zu übernehmen   Zeit, wie zum Beispiel einer Auffrischung oder Sicherung eines   große Datenbank oder eine langsame   Kommunikationsverbindung, asynchrone I / O   ein guter Weg ist in der Regel zu optimieren   Verarbeitungseffizienz. Doch für   relativ schnelle I / O-Operationen, die   Overhead der Verarbeitung Kernel I / O   Anfragen und Kernel-Signale können machen   asynchrone I / O weniger vorteilhaft,   insbesondere dann, wenn viele schnellen I / O   Operationen vorgenommen werden müssen. In diesem   Fall synchrone E / A wäre besser.   Die Mechanismen und Umsetzung   Einzelheiten darüber, wie diese zu erreichen,   Aufgaben variieren in Abhängigkeit von der Art der   Vorrichtung Griff, der verwendet wird, und die   besondere Bedürfnisse der Anwendung.   Mit anderen Worten gibt es in der Regel   mehrere Möglichkeiten, das Problem zu lösen.

FWIW, ich denke, @ Alex richtig ist, dass es ein anderer Thread ist, den Kernel-Code im Zusammenhang mit Ihrer E / A-Anforderung ausgeführt wird. Das Gewinde wird durch Ihre Anwendung nicht verwaltet, though. Der Thread des Kernel-Code ausgeführt werden kann dich auf einem Gerät I / O-Anforderung blockieren und für die eigentliche Hardware warten, um die Anforderung abzuschließen, bevor Sie Ihren Benutzermodus-Thread signalisiert, aber es ist immer noch da dennoch.

asynchrone Threads verwenden soll nicht als Möglichkeit gedacht werden, um die Geschwindigkeit einer bestimmten Anforderung zu erhöhen, sondern eine Möglichkeit, die Gesamteffizienz zu erhöhen, indem Ihre Anwendung ermöglicht die Verarbeitung auf anderen Aufgaben fortzusetzen, während relativ langsam mich erwartet / O .

Sind Sie sicher, dass Sie Ihren Kopiervorgang richtig gebenchmarkt? All asynchroner Betrieb nur neuen Thread erstellen und führt den Betrieb in neuem Thread während Hauptthread für andere Dinge zu tun.

Die asynchronen Operationen geben meist ein einige Vereinfachungen (weniger Code-Zeilen) über den Faden selbst zu schaffen, aber sie sollten nicht mehr die Leistung auswirken dann einen neuen Thread zu erstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top