29Jul
Wenn Sie sich über Webserver und ihre Funktionsweise informieren, sind Sie vielleicht neugierig, ob sie ständig auf Anfragen warten oder warten, bis sie eine Anfrage erhalten, um in Aktion zu treten. In diesem Sinne hat der heutige SuperUser Q & A-Post die Antworten, um die Neugier eines Lesers zu befriedigen.
Die heutige Frage &Die Antwortsitzung kommt dank SuperUser, einer Unterteilung von Stack Exchange, einer Community-gesteuerten Gruppierung von Q & A-Websites, zu uns.
Screenshot mit freundlicher Genehmigung von xmodulo / Linux Screenshots( Flickr).
Die Frage
SuperUser reader user2202911 möchte wissen, wie Webserver auf neue Anfragen warten:
Ich versuche die Details der Funktionsweise von Webservern zu verstehen. Ich möchte wissen, ob ein Server, sagen wir zum Beispiel Apache, ständig nach neuen Anfragen fragt oder ob es durch ein Interrupt-System funktioniert. Wenn es ein Interrupt ist, was löst den Interrupt aus? Ist es der Netzwerkkartentreiber?
Wie hört ein Webserver auf neue Anfragen?
Der Antwort-
-SuperUser-Mitwirkende Greg Bowser hat die Antwort für uns:
Die kurze Antwort ist eine Art Interrupt-System. Im Wesentlichen verwenden sie blockierende E / A, dh sie schlafen( blockieren), während sie auf neue Daten warten.
- Der Server erstellt einen Listening-Socket und blockiert dann, während er auf neue Verbindungen wartet. Während dieser Zeit setzt der Kernel den Prozess in einen -Zustand mit unterbrechbarem Schlaf und führt andere Prozesse aus. Dies ist ein wichtiger Punkt;Wenn die Prozessabfrage kontinuierlich läuft, würden CPU-Ressourcen verschwendet werden. Der Kernel ist in der Lage, die Systemressourcen effizienter zu nutzen, indem er den Prozess so lange blockiert, bis es Arbeit für ihn gibt.
- Wenn neue Daten im Netzwerk ankommen, gibt die Netzwerkkarte einen Interrupt aus.
- Da der Kernel von der Netzwerkkarte unterbrochen wird, liest der Kernel über den Netzwerkkartentreiber die neuen Daten von der Netzwerkkarte und speichert sie im Speicher.(Dies muss schnell geschehen und wird im Allgemeinen innerhalb des Interrupt-Handlers abgewickelt.)
- Der Kernel verarbeitet die neu angekommenen Daten und ordnet sie einem Socket zu. Ein Prozess, der auf diesem Socket blockiert, wird als runnable markiert, was bedeutet, dass er jetzt ausgeführt werden kann. Es läuft nicht unbedingt sofort( der Kernel kann entscheiden, andere Prozesse noch auszuführen).
- In seiner Freizeit wird der Kernel den blockierten Webserverprozess aufwecken.(Da es jetzt ausführbar ist.)
- Der Webserverprozess wird so ausgeführt, als wäre keine Zeit vergangen. Der blockierende Systemaufruf kehrt zurück und verarbeitet neue Daten. Gehen Sie dann zu Schritt 1.
Haben Sie etwas zur Erklärung hinzuzufügen? Ton in den Kommentaren ab. Möchten Sie mehr Antworten von anderen technisch versierten Stack Exchange Benutzern lesen? Sehen Sie sich den vollständigen Diskussionsfaden hier an.