Synchronisation (englisch: Synchronization) bezieht sich auf die Koordination von Ereignissen, die in einem System auftreten, um zeitliche Konsistenz und Vereinheitlichung zu erreichen. Um es ganz klar auszudrücken: Mehrere Aufgaben werden nacheinander ausgeführt, und nur eine Aufgabe wird gleichzeitig ausgeführt.
Asynchron (englisch: Asynchronization) bezieht sich darauf, dass die CPU die Antwort auf die aktuelle Anfrage vorübergehend beiseite legt, die nächste Anfrage verarbeitet und nach Erhalt einer Rückrufbenachrichtigung durch Abfrage oder andere Methoden mit der Ausführung beginnt. Multithreads stellen asynchrone Vorgänge zur Ausführung in einen anderen Thread und erhalten Abschlussbenachrichtigungen über Abfrage- oder Rückrufmethoden. Am Abschlussport übernimmt jedoch das Betriebssystem die Planung asynchroner Vorgänge und löst die Rückrufmethode aus, wenn sie abgeschlossen ist Hardware-Interrupts sind für diese Methode nicht erforderlich.
2.1. Warum müssen wir in ASP.NET MVC asynchron verwenden?
IIS verfügt über einen Thread-Pool zur Bearbeitung von Benutzeranfragen. Wenn eine neue Anfrage eingeht, werden die Threads im Pool für die Bearbeitung der Anfrage geplant Wenn die Threads im Pool nicht mehr so viele Anfragen erfüllen können und jeder Thread im Pool ausgelastet ist, wird der Thread, der die Anfrage verarbeitet, blockiert, und der Thread kann keine andere Anfrage bedienen Wenn die Anforderungswarteschlange voll ist, lehnt der Webserver die Anforderung ab und befindet sich im HTTP 503-Beschäftigt-Zustand. Wenn Sie mit hohen Verzögerungen zu kämpfen haben, beispielsweise bei Netzwerkvorgängen, warten die meisten dieser Threads einfach im Status und tun die meiste Zeit nichts. Solche Threads können mithilfe der asynchronen Programmierung besser genutzt werden.
Szenariobeschreibung eins: Wenn eine Anfrage einen Netzwerkaufruf generiert, dessen Abschluss zwei Sekunden dauert, unabhängig davon, ob die Anfrage synchron oder beide asynchrone Ausführungen sind Nehmen Sie sich zwei Sekunden Zeit. Während eines asynchronen Aufrufs blockiert der Server jedoch nicht die Beantwortung anderer Anforderungen, während er auf den Abschluss der ersten Anforderung wartet. Daher verhindern asynchrone Anforderungen das Einreihen von Anforderungen in die Warteschlange, wenn viele Anforderungen lang laufende Vorgänge aufrufen.
Szenariobeschreibung zwei: Angenommen, ich habe drei Vorgänge, die jeweils 500, 600 und 700 Millisekunden dauern. Bei synchronen Aufrufen beträgt die Gesamtantwortzeit etwas mehr als 1800 Millisekunden. Wenn es sich jedoch um einen asynchronen Aufruf (gleichzeitig) handelt, beträgt die Gesamtantwortzeit etwas mehr als 700 Millisekunden, da dies die Dauer der längsten Aufgabe/Operation ist. Deshalb: Asynchrone Aktionsmethoden sind nützlich, wenn eine Aktion mehrere unabhängige Vorgänge mit langer Laufzeit ausführen muss.
3.1. Verwenden Sie die synchrone Pipeline, wenn die folgenden Bedingungen erfüllt sind:
1) Die Bedienung ist sehr einfach oder die Laufzeit ist sehr kurz.
2) Einfachheit ist wichtiger als Effizienz.
3) Bei diesem Vorgang handelt es sich hauptsächlich um einen CPU-Vorgang und nicht um einen Vorgang, der einen großen Festplatten- oder Netzwerk-Overhead mit sich bringt. Die Verwendung asynchroner Betriebsmethoden für CPU-gebundene Vorgänge bietet keinen Vorteil und führt außerdem zu einem höheren Overhead.
3.2 Verwenden Sie asynchrone Pipelines, wenn die folgenden Bedingungen erfüllt sind:
1) , Vorgänge sind netzwerkgebunden oder E/A-gebunden und nicht CPU-gebunden.
2), Tests zeigen, dass Blockierungsvorgänge einen Engpass für die Website-Leistung darstellen, und durch die Verwendung asynchroner Operationsmethoden für diese Blockierungsaufrufe kann IIS mehr Anfragen bedienen.
Parallelität ist wichtiger als die Einfachheit des Codes.
3) Sie möchten einen Mechanismus bereitstellen, der es Benutzern ermöglicht, lang laufende Anfragen abzubrechen.
4.1 Da asynchron die Reaktionsfähigkeit von Anwendungen erheblich verbessern kann? Was wird also der Effekt sein, wenn ASP.NET MVC alle asynchrone Controller verwendet (Async Controller)? Wird es eine Website mit hohem Durchsatz und hoher Parallelität sein?
Nur das Hinzufügen von Async zum Code bringt tatsächlich keine Leistungsverbesserung. Es muss asynchron ausgeführt werden, wenn Asynchronität erforderlich ist (IO). Auf diese Weise kann der Durchsatz wirklich verbessert werden. Asynchrone Controller werden hauptsächlich für E/A-intensive Vorgänge wie das Lesen und Schreiben von Daten verwendet, und die Vorgänge sind relativ unabhängig. CPU-intensive Vorgänge sind nicht für asynchrone Vorgänge geeignet – unabhängig davon, ob Sie asynchron oder synchron verarbeiten, wird die CPU dies letztendlich tun gefüllt werden. Asynchrone Vorgänge können also tatsächlich den Effekt einer Erhöhung der Parallelität erzielen, dies hängt jedoch davon ab, wo Sie sie verwenden. Die Verwendung aller asynchronen Controller wird die Leistung der Website nicht unbedingt verbessern.
Das obige ist der detaillierte Inhalt vonSo nutzen Sie die asynchrone Programmiertechnologie in ASP.NET MVC richtig. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!