Wie warten Webserver auf neue Anforderungen?
Wenn Sie sich mit Webservern und deren Funktionsweise vertraut machen, sind Sie möglicherweise neugierig, ob sie ständig auf Anfragen warten oder warten, bis sie eine Aufforderung erhalten, aktiv zu werden. In diesem Sinne hat der heutige SuperUser-Beitrag Antworten und Antworten, um die Neugier eines Lesers zu befriedigen.
Die heutige Question & Answer-Sitzung wird dank SuperUser zur Verfügung gestellt - einer Unterteilung von Stack Exchange, einer Community-basierten Gruppierung von Q & A-Websites.
Screenshot mit freundlicher Genehmigung von xmodulo / Linux Screenshots (Flickr).
Die Frage
Der SuperUser-Reader user2202911 möchte wissen, wie Webserver auf neue Anfragen warten:
Ich versuche die tieferen Details der Funktionsweise von Webservern zu verstehen. Ich möchte wissen, ob ein Server, zum Beispiel Apache, ständig neue Anfragen abfragt oder ob er durch ein Interrupt-System funktioniert. Wenn es sich um einen Interrupt handelt, was löst den Interrupt aus? Ist es der Netzwerkkartentreiber?
Wie wartet ein Webserver auf neue Anfragen??
Die Antwort
Der Superuser-Mitwirkende Greg Bowser hat die Antwort für uns:
Die kurze Antwort ist ein Interrupt-System. Im Wesentlichen verwenden sie blockierende E / A, was bedeutet, dass sie schlafen (blockieren), während sie auf neue Daten warten.
- Der Server erstellt einen abhörenden Socket und blockiert dann, während er auf neue Verbindungen wartet. Während dieser Zeit setzt der Kernel den Prozess in eine unterbrechbarer Schlaf Zustand und führt andere Prozesse aus. Dies ist ein wichtiger Punkt. Wenn der Prozess kontinuierlich abgerufen wird, würde dies CPU-Ressourcen verschwenden. Der Kernel ist in der Lage, die Systemressourcen effizienter zu nutzen, indem er den Prozess blockiert, bis es Arbeit gibt.
- Wenn neue Daten im Netzwerk eingehen, gibt die Netzwerkkarte einen Interrupt aus.
- Der Kernel erkennt die Unterbrechung der Netzwerkkarte und liest die neuen Daten von der Netzwerkkarte und speichert sie über den Netzwerkkartentreiber. (Dies muss schnell erfolgen und wird im Allgemeinen im Interrupt-Handler behandelt.)
- Der Kernel verarbeitet die neu eingetroffenen Daten und ordnet sie einem Socket zu. Ein Prozess, der für diesen Socket blockiert, wird als lauffähig gekennzeichnet, was bedeutet, dass er jetzt ausgeführt werden kann. Es wird nicht unbedingt sofort ausgeführt (der Kernel entscheidet möglicherweise, andere Prozesse noch auszuführen).
- In seiner Freizeit wird der Kernel den blockierten Webserverprozess aufwecken. (Da ist es jetzt lauffähig.)
- Der Webserverprozess wird so ausgeführt, als ob keine Zeit vergangen wäre. Sein blockierender Systemaufruf kehrt zurück und verarbeitet alle neuen Daten. Dann weiter mit Schritt 1.
Haben Sie der Erklärung etwas hinzuzufügen? Sound off in den Kommentaren. Möchten Sie mehr Antworten von anderen technisch versierten Stack Exchange-Benutzern lesen? Hier geht es zum vollständigen Diskussionsthread.