Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Warum ist Nginx so schnell?

Warum ist Nginx so schnell?

步履不停
步履不停Original
2019-06-20 17:52:123886Durchsuche

Warum ist Nginx so schnell?

Der Hauptgrund ist, dass Nginx das neueste Netzwerk-E/A-Modell epoll (Linux 2.6-Kernel) und kqueue (freebsd) verwendet.

epoll ist eine Methode zum Multiplexen von IO (I/O-Multiplexing), wird jedoch nur für Linux2.6- und höher-Kernel verwendet. Bevor wir mit der Diskussion dieses Problems beginnen, erklären wir, warum Multiplexing IO erforderlich ist .

Lassen Sie es uns anhand eines Beispiels aus dem Leben erklären.

Angenommen, Sie studieren auf dem College und müssen auf den Besuch eines Freundes warten, und dieser Freund weiß nur, dass Sie sich im Gebäude Nummer A befinden , aber ich weiß nicht genau, wo Sie wohnen, also haben Sie einen Termin für ein Treffen an der Tür von Gebäude A vereinbart.

Wenn Sie das blockierende IO-Modell verwenden, um dieses Problem zu lösen, können Sie nur warten Ständig in Gebäude A warten. Während dieser Zeit können Sie nichts anderes tun. Es ist nicht schwer zu wissen, dass die Effizienz dieser Methode gering ist > Jetzt haben sich die Zeiten geändert und das IO-Modell wird verwendet, um dieses Problem zu lösen. Sie sagen Ihrem Freund, er solle zu Gebäude A kommen und Ihnen sagen, wie es weitergeht Die Rolle von Multiplex-IO.

Erklären Sie den Unterschied zwischen dem Select- und dem Epoll-Modell weiter.

Was die Tante der Select-Version tut, ist wie folgt: Wenn zum Beispiel der Freund von Klassenkamerad A kommt, wird der Select Die Tante der Version ist dumm und nimmt ihre Freunde mit von Raum zu Raum, um zu überprüfen, wer wer ist. Es ist Klassenkamerad A. Der Freund, auf den Sie gewartet haben, ist angekommen, daher macht die Tante der ausgewählten Version im eigentlichen Code Folgendes:


Code-Hervorhebung erstellt mit Actipro CodeHighlighter (Freeware)


int
n = select(&readset,NULL,NULL, 100);

für
(int i = 0 ; n > 0; ++i){

if
(FD_ISSET(fdarray[i], &readset)){ do_something(fdarray[i]);
--n;
}
}


Die Epoll-Version ist fortgeschrittener, sie hat es aufgeschrieben. Wenn Sie Informationen zu Klassenkamerad A haben, z. B. seine Zimmernummer, müssen Sie dem Freund, wenn der Freund von Klassenkamerad A ankommt, nur sagen, um welches Zimmer Klassenkamerad A es sich handelt in, und Sie müssen nicht nach jemandem in dem Gebäude voller Menschen suchen. Was die Tante tut, kann also durch den folgenden Code dargestellt werden:



Code-Hervorhebung erstellt von Actipro CodeHighlighter (Freeware)
n
=epoll_wait( epfd,events,20,500);

for
(i=0 ;i<n;++i){do_something(events [n]);
}



In epoll ist die Schlüsseldatenstruktur epoll_event wie folgt definiert:

typedef union epoll_data {
void * ptr;
int fd;
__uint32_t u32;
__uint64_t u64;
} epoll_data_t;

struct epoll_event {
__uint32_t events; data ;
/* Benutzerdatenvariable */
}
Sie können sehen , epoll_data ist eine Union-Struktur, die von der epoll-Version von Tante zum Speichern von Klassenkameradeninformationen verwendet wird. Sie kann viele Arten von Informationen speichern: FD, Zeiger usw. Mit dieser Struktur kann epoll aunt sie ohne großen Aufwand finden. An Klassenkamerad A. Unterschätzen Sie diese Effizienzverbesserungen nicht. In einem großen gleichzeitigen Server ist das Abfragen von E/A einer der zeitaufwändigsten Vorgänge, wenn jedes Mal ein Freund erstellt wird Der Manager möchte die Klassenkameraden im gesamten Gebäude abfragen, sodass die Verarbeitungseffizienz zwangsläufig gering sein wird. Vergleichen Sie das früheste blockierende E/A-Verarbeitungsmodell Nach der Verwendung von Multiplex-E/A kann das Programm seine eigene Arbeit mit Ausnahme von E/A-Vorgängen frei ausführen. Nur wenn sich der E/A-Status ändert, wird es von Multiplex-E/A benachrichtigt und dann entsprechende Vorgänge ausgeführt, anstatt zu blockieren und auf die Änderung des E/A-Status zu warten .
Aus der obigen Analyse geht auch hervor, dass die Verbesserung von Epoll gegenüber Select tatsächlich eine spezifische Anwendung der Idee ist, Raum gegen Zeit auszutauschen.

Weitere technische Artikel zum Thema Nginx finden Sie in der Spalte


Nginx-Tutorial


, um mehr zu erfahren!

Das obige ist der detaillierte Inhalt vonWarum ist Nginx so schnell?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn