Threadpool
Ich wollte das Projekt schon immer asynchron umschreiben, aber ASP.NETMVC3 ist zu umständlich, .NET 4.5 und ASP.NET MVC-Code ist relativ einfach, Microsoft scheint das immer gern gemacht zu haben, jedes ausgereifte Ding muss mehrere Versionen entwickeln, um standardisiert zu werden. ASP.NET warum muss man im MVC asynchron verwenden? IIS hat einen Thread-Pool, um Benutzeranfragen zu verarbeiten. Wenn eine neue Anfrage kommt, werden die Threads im Pool für die Bearbeitung der Anfrage vorgesehen, aber wenn die Nebenläufigkeit hoch ist, können die Threads im Pool nicht mehr so viele Anfragen erfüllen, und jeder Thread im Pool ist bei der Verarbeitung der Anfrage beschäftigt, der Thread, der die Anfrage verarbeitet, wird blockiert und der Thread kann keine Dienste für eine andere Anfrage bereitstellen; wenn die Request-Warteschlange voll ist, das Web Der Server lehnt die Anfrage ab und befindet sich im HTTP-503-Besetzt-Zustand. Wenn Sie mit hoher Latenz zu tun haben, wie etwa bei Netzwerkoperationen, warten die meisten dieser Threads einfach auf den Zustand und tun meistens nichts; solche Threads können asynchrone Programmierung nutzen, um sie besser zu nutzen.
Asynchrone Verarbeitung
Wenn zum Beispiel eine Anfrage einen Netzwerkaufruf erzeugt, der zwei Sekunden dauert, wird die Anfrage gestelltEs dauert zwei Sekunden, sowohl synchron als auch asynchron auszuführen.。 AberWährend eines asynchronen Aufrufs blockiert der Server die Antwort auf andere Anfragen nicht, während er darauf wartet, dass die erste Anfrage abgeschlossen ist。 Daher können asynchrone Anfragen bei vielen Anfragen, die langlaufende Operationen aufrufen, verhindern, dass Anfragen in die Warteschlange kommen. In .NET 4.5 beträgt der maximale Threadpool 5000, und die Schlüsselwörter await und async wurden ebenfalls hinzugefügt, um asynchrone Programmierung zu vereinfachen.
Synchron oder asynchron (Auszug aus MSDN)
- Typischerweise werden Sync-Pipelines verwendet, wenn die folgenden Bedingungen erfüllt sind:
- Einfacher Betrieb oder kurze Laufzeit.
- Einfachheit ist wichtiger als Effizienz.
- Diese Operation besteht hauptsächlich aus CPU-Operationen und nicht aus Operationen, die viel Festplatten- oder Netzwerk-Overhead erfordern. Die Verwendung einer asynchronen Betriebsmethode für CPU-gebundene Operationen bringt keinen Vorteil und führt zudem zu mehr Overhead.
Im Allgemeinen werden asynchrone Pipelines verwendet, wenn folgende Bedingungen erfüllt sind:
- Die Operationen sind netzwerkgebunden oder I/O-gebunden, nicht CPU-gebunden.
- Tests haben gezeigt, dass Blockieroperationen ein Engpass für die Standortleistung darstellen, und durch asynchrone Methoden für diese Blockierungsaufrufe kann IIS mehr Anfragen bedienen.
- Parallelität ist wichtiger als die Einfachheit des Codes.
- Man möchte einen Mechanismus bereitstellen, der es Nutzern ermöglicht, langlaufende Anfragen abzubrechen.
ASP.NET verwenden asynchrone Controller im MVC
|