Wie implementiert Node.js die asynchrone Ressourcenkontextfreigabe? Der folgende Artikel stellt Ihnen vor, wie Node die asynchrone Ressourcenkontextfreigabe implementiert. Lassen Sie uns über die Verwendung der asynchronen Ressourcenkontextfreigabe sprechen.
Asynchrone Ressourcenkontextfreigabe bedeutet die gemeinsame Nutzung von Kontextdaten innerhalb eines Netzwerkanforderungslebenszyklus oder einer asynchronen Ressourcenaufrufkette.
Bevor wir diese Frage beantworten, müssen wir zunächst verstehen, was asynchrone Ressourcen sind.
Asynchrone Ressourcen können als Objekte mit Rückrufen verstanden werden, wie z. B. Versprechen, Zeitüberschreitungen, TCPWrap, UDP usw., sind aber nicht darauf beschränkt. Weitere Informationen finden Sie in der Liste der asynchronen Ressourcentypen.
AsyncLocalStorage kann Daten in asynchronen Operationsketten teilen.Die offizielle Definition lautet wie folgt:
Eine asynchrone Ressource stellt ein Objekt mit einem zugehörigen Rückruf dar. Dieser Rückruf kann mehrmals aufgerufen werden, z. B. beim Ereignis „Verbindung“ in net.createServer(), oder nur einmal Wie in fs .open() kann eine Ressource auch geschlossen werden, bevor der Rückruf aufgerufen wird experimentell vor 16.4.0 Feature, ist seit 16.4.0 stabil.
disable() deaktiviert asyncLocalStorage; getStore() gibt den aktuellen Kontextspeicher zurück, der asyncLocalStorage.run() oder asyncLocalStorage.enterWith() für die asynchrone Kontextinitialisierung verwenden muss;
enterWith(store) Übergeben Sie den Kontextspeicher über diese Methode, und der Speicher kann in allen nachfolgenden asynchronen Aufrufen abgerufen werden.
Beispiel:const store = { id: 1 }; // Replaces previous store with the given store object asyncLocalStorage.enterWith(store); asyncLocalStorage.getStore(); // Returns the store object someAsyncOperation(() => { asyncLocalStorage.getStore(); // Returns the same object });
runA 8f19ebef-58d7-4b1a-8b9b-46d158beb5d2 2022/5/24 20:26:17 this is a log message runB 8f19ebef-58d7-4b1a-8b9b-46d158beb5d2 2022/5/24 20:26:17 this is a log message
In derselben asynchronen Funktion, die über asyncLocalStorage.run ausgeführt wird, werden die Funktionen runA und runB ausgeführt. runA und runB haben Zugriff auf dieselben Kontextdaten.
LeistungsproblemeAsyncLocalStorage bietet uns eine großartige Möglichkeit, die asynchrone Ressourcenkontextfreigabe in Node.js einfach zu implementieren, aber jeder asynchrone Ressourcenvorgang löst Async-Hooks aus, was unweigerlich einen gewissen Einfluss auf die Leistung unseres Knotens haben wird Anwendung. . Wie groß ist also die Auswirkung? Laut einer tatsächlichen Messung vonKuzzle
führt die Verwendung von AsyncLocalStorage zu einem zusätzlichen Leistungsverlust von etwa 8 %. Natürlich können verschiedene Geschäftsszenarien eine unterschiedliche Leistung haben. Wenn Sie sich über diesen Teil der Leistung Sorgen machen, können Sie Ihrem Unternehmen auch Vergleichstests hinzufügen, um die spezifischen Auswirkungen auf die Leistung zu testen.----
Protokoll mit AsyncLocalStorageProtokoll klassisch
req/s | 2613 | 2842 | |
---|---|---|---|
Anwendungsszenarien | In anderen Multithread-Sprachen erstellt jedes HTTP einen neuen Thread und jeder Thread hat seinen eigenen Speicher. Sie können den globalen Status im Thread-Speicher speichern und den globalen Status von überall in Ihrem Code abrufen. |
Das obige ist der detaillierte Inhalt vonWas sind asynchrone Ressourcen? Eine kurze Analyse der Methode von Node zur Realisierung der asynchronen gemeinsamen Nutzung von Ressourcenkontexten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!