Hemsida » hur » Hur lyssnar webbservrar på nya förfrågningar?

    Hur lyssnar webbservrar på nya förfrågningar?

    När du lär dig om webbservrar och hur de fungerar kan du vara nyfiken om de ständigt lyssnar på förfrågningar eller om de väntar tills de får en begäran om att gå till handling. Med det i åtanke har dagens SuperUser Q & A-post svaren för att tillgodose en läsares nyfikenhet.

    Dagens Question & Answer-session kommer till oss med tillstånd av SuperUser-en indelning av Stack Exchange, en community-driven gruppering av Q & A-webbplatser.

    Skärmdump med tillstånd av xmodulo / Linux Skärmdumpar (Flickr).

    Frågan

    SuperUser-läsaren user2202911 vill veta hur webbservrar lyssnar på nya förfrågningar:

    Jag försöker förstå detaljerna om djupare nivå på hur webbservrar fungerar. Jag vill veta om en server, till exempel Apache, ständigt pollar för nya förfrågningar eller om det fungerar av något slags avbrottssystem. Om det är ett avbrott, vad är det som gnider avbrottet? Är det nätverksdrivrutinen?

    Hur lyssnar en webbserver på nya förfrågningar?

    Svaret

    SuperUser-bidragsgivaren Greg Bowser har svaret för oss:

    Det korta svaret är ett slags avbrottssystem. I huvudsak använder de blockering av I / O, vilket betyder att de sover (block) medan de väntar på nya data.

    1. Servern skapar ett lyssnitt och blockerar sedan medan man väntar på nya anslutningar. Under denna tid sätter kärnan processen i en avbrytbar sömn Ange och kör andra processer. Detta är en viktig punkt. Om processundersökningen fortlöpande skulle slösa bort CPU-resurser. Kärnan kan använda systemresurserna mer effektivt genom att blockera processen tills det finns arbete för det att göra.
    2. När nya data anländer till nätverket utfärdar nätverkskortet ett avbrott.
    3. Se till att det finns ett avbrott från nätverkskortet, läser kärnan via nätverksskorthållaren de nya data från nätverkskortet och lagrar det i minnet. (Detta måste ske snabbt och hanteras vanligtvis inom avbrottshanteraren.)
    4. Kärnan behandlar nyanlända data och associerar den med ett uttag. En process som blockerar den kontakten kommer att markeras runnable, vilket innebär att den nu är berättigad att köra. Det går inte nödvändigtvis omedelbart (kärnan kan besluta att köra andra processer fortfarande).
    5. På fritiden kommer kärnan att vakna upp den blockerade webbserverprocessen. (Eftersom det nu kan köras.)
    6. Webserverprocessen fortsätter att utföras som om ingen tid har gått. Dess blockeringssystem återkallar och det behandlar ny data. Gå sedan till steg 1.

    Har du något att lägga till förklaringen? Ljud av i kommentarerna. Vill du läsa mer svar från andra tech-savvy Stack Exchange-användare? Kolla in hela diskussionsgängan här.