Python und Ruby haben auch ein solches Framework, aber da Bibliotheken, die Synchroncode enthalten, im tatsächlichen Gebrauch unweigerlich verwendet werden, sind sie nicht erwachsen. Vor Node.js war die serverseitige Programmierung von JavaScript nahezu leer, sodass Node.js eine Codebibliothek einrichten konnte, in der alle IO asynchron waren.
Die Engpässe der meisten Webanwendungen sind in IO, nämlich Lesen und Schreiben von Datenträgern, lesen und schreiben Netzwerke und lesen und schreiben Datenbanken. Welche Art von Strategie, um auf diesen Zeitraum zu warten, ist zum entscheidenden Punkt bei der Verbesserung der Leistung geworden.
PHP -Strategie: Führen Sie mehrere Prozesse aus und warten Sie, bis IO direkt abgeschlossen ist. Nachteile: Mehrere Prozesse verbrauchen mehreren Speicher, sodass es schwierig ist, Daten zwischen den Prozessen zu teilen.
C/C ++ gemeinsame Strategie: Multi-threading laufen und das Programm behält den Sperrstatus selbst bei. Nachteile: Hohe Entwicklungskosten, leicht zu fehlerfreie und schwer zu debuggen.
Python (Tornado): In einem einzigen Prozess werden mehrere Anfragen ausgeführt und wechseln zu einer anderen Anfrage, wenn ich auf IO stoße. Nachteile: Für eine einzige Anfrage wird die Zeit immer noch nicht am effizientesten genutzt.
Was ist "Zeit am effizient am effizient"? Zum Beispiel gibt es jetzt zwei nicht verwandte Datenbankabfragen. In PHP wird in der Regel zuerst ausgeführt, und der zweite wird nach Abschluss der Ausführung ausgeführt (die Gesamtzeit ist A + B). Offensichtlich ist dies nicht die effizienteste. Zwei Abfragen sollten gleichzeitig ausgeführt werden, und die Zeit ist max (a, b).
Das Problem mit Python und anderen Sprachen, die Multithreading unterstützen, ist, dass es für Programmierer schwierig ist, virtuelle Maschinen zu sagen, dass zwei Operationen gleichzeitig ausgeführt werden sollten. Auch wenn es einen Weg gibt, ist es ziemlich problematisch. Die meisten Menschen sind zu faul, um es zu verwenden (es keinen Wert wert). Da Node.js alle IO -Ausführung asynchron erzwingt, können Node.js -Programmierer auch gesagt werden, dass sie damit vertraut sind. In Kombination mit einigen Bibliotheken zur Verbesserung der Code -Lesbarkeit (Versprechen, Async) kann es leicht ermöglichen, dass irrelevante Vorgänge parallel ausgeführt werden.
Die obigen Gespräche über die Implementierung von asynchronem IO. Wo spiegeln sich die Vorteile von asynchronem IO also wider? Tatsächlich kann asynchrones IO den Druck auf den Server auf magische Weise auf magische Weise verringern. Um einen Server hinzuzufügen, müssen Sie weiterhin einen Server hinzufügen, aber der asynchrone IO verkürzt die Zeit einer einzelnen Anforderung und entzieht die bedeutungslose Wartezeit in einer einzelnen Anforderung. Daher haben sich die innerhalb der Einheitszeit bearbeiteten Anfragen nicht geändert, aber die Verarbeitungszeit für jede Anfrage wurde reduziert. Aus dieser Perspektive speichert der Server auch einige Ressourcen - dh den Speicher, der von jeder angeforderten Verbindung verbraucht wird.