Heim > Artikel > Betrieb und Instandhaltung > Warum ist Nginx schnell?
Warum ist Nginx so effizient und so schnell?
Designprinzip
Ein Hochleistungsserver zeichnet sich typischerweise durch eine hohe Verarbeitungsgeschwindigkeit und einen geringen Ressourcenverbrauch aus, insbesondere wenn dies der Fall ist Zehntausende von Verbindungen gleichzeitig online. Um eine schnelle Verarbeitungsgeschwindigkeit zu erreichen, ist das Design des Parallelitätsmodells besonders wichtig.
Der Grad der Server-Parallelität hängt von zwei Faktoren ab: Zum einen von der Anzahl der damit verbundenen Prozesse Der andere ist die Anzahl der Prozesse, die jeder Prozess gleichzeitig verarbeiten kann. Daher besteht das Server-Parallelitätsmodell aus zwei Teilen, der Dienstbereitstellungsmethode und dem Linkverarbeitungsmechanismus 🎜>Aufgrund dieser beiden einzigartigen Methoden funktioniert Nginx gut unter denselben Webservertypen.
VerbindungsmethodeIm Allgemeinen werden Webserver-Verbindungsmethoden in drei Typen unterteilt : Multiprozessmethode, Multithread-Methode und asynchrone Methode. Multi-Prozess erfordert zusätzlichen Overhead, z. B. das Kopieren von Speicher, während Multi-Threading keinen Overhead erfordert.
Asynchron verwendet eine nicht blockierende Methode, um mit jedem Client zu kommunizieren. Zu den typischen Anwendungen gehört Der Arbeitsprozess von Nginx. Unter diesen ist die effizienteste asynchrone Methode, die stabilste Multiprozess-Methode und die geringste Ressourcenbelegung Multithreading
Nginx bietet Dienste basierend auf dem Ereignismodell (asynchroner Modus). Dies ist besser geeignet, wenn die Anzahl der Verbindungen pro Sekunde und die Anzahl der Anforderungen gleichzeitig nichtlinear sind. Selbst wenn die Last zunimmt, bleibt die Anzahl der Speicher- und CPU-Nutzungsereignisse vorhersehbar. Nginx kann mit normaler Hardware Zehntausende gleichzeitiger Verbindungen auf einem Server verarbeiten. Dies ist der erste Grund für die hohe Leistung von Nginx.Andere Dinge, die Nginx macht
Zusätzlich zu den oben genannten beiden Prinzipien gibt es intern viele sichtbare Detailoptimierungen, die einen Multiprozess-Einzelprozess verwenden. Thread-Arbeitsmethode, und die Affinität zwischen der CPU und dem Prozess wird verwendet, um den Prozess an eine bestimmte CPU zu binden, wodurch die Kosten für den Prozesskontextwechsel vermieden und somit die CPU-Auslastung reduziert wird. Darüber hinaus wird ein effizienter Speicherpool implementiert, der die Speichernutzung usw. minimiert.
VerbindungsverarbeitungsmechanismusEs gibt fünf Linux-Verbindungsmodelle, synchrones IO und Synchronisationsgebührenblockierung io, asynchrones blockierendes io (io-Multiplexing), asynchrones nicht blockierendes io (signalgesteuertes oder asynchrones io)
Die folgenden sind die wichtigsten Punkte:
<1> O Multiplexing Wenn Sie das Modell verwenden, verwenden Sie die Auswahl- oder Abfragefunktion. Im Gegensatz zum Blockieren von E/A können sie auch mehrere E/A-Vorgänge gleichzeitig blockieren Mehrere Lesevorgänge gleichzeitig werden erkannt und die E/A-Operationsfunktion wird erst dann aufgerufen, wenn die Daten lesbar oder beschreibbar sind.
Im io-Wiederverwendungsmodell werden Auswählen und Abfragen im Allgemeinen von Betriebssystemen unterstützt, aber jedes Mal, wenn Sie warten, müssen Sie die Socket-Schnittstelle einrichten, auf die gewartet werden muss, und die interne Implementierung ist nicht effizient Dies macht es schwierig, eine hohe Parallelitätsüberwachung zu bezahlen. Verschiedene Betriebssysteme verwenden unterschiedliche fortschrittliche Abfragetechniken, um eine Hochleistungsüberwachung zu unterstützen. Im Allgemeinen sind diese Methoden nicht portierbar.
Nginx hat verschiedene E/A-Verarbeitungsmechanismen für verschiedene Betriebssysteme angepasst und nutzt im Allgemeinen die Hochleistungsschnittstelle des Betriebssystems. Dies ist der zweite Grund für die hohe Leistung von Nginx< 2>Asynchrone E/A: Wenn eine asynchrone Prozeduraufrufanforderung ausgegeben wird, kann der Aufrufer das Ergebnis nicht sofort erhalten. Nachdem die Komponente, die diesen Aufruf tatsächlich verarbeitet, abgeschlossen ist, benachrichtigt sie den Aufrufer durch Status, Benachrichtigungen und Rückrufe über die Eingabe- und Ausgabevorgänge.
Weitere technische Artikel zu Nginx finden Sie im
Tutorial zur Nginx-NutzungDas obige ist der detaillierte Inhalt vonWarum ist Nginx schnell?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!