Cum ascultă serverele Web pentru noile solicitări?
Atunci când învățați despre serverele web și despre modul în care funcționează, este posibil să fiți curioși dacă ascultă în mod constant cererile sau dacă așteaptă până când primesc o solicitare de a intra în acțiune. În acest sens, postul de astăzi SuperUser Q & A are răspunsurile pentru a satisface curiozitatea cititorului.
Sesiunea de întrebări și răspunsuri din ziua de astăzi vine de la amabilitatea SuperUser - o subdiviziune a Stack Exchange, o grupare bazată pe comunitate a site-urilor web Q & A.
Imaginea de pe urma screenshot-ului xmodulo / Linux (Flickr).
Intrebarea
Cititorul de SuperUser user2202911 dorește să știe cum serverele web ascultă pentru noi cereri:
Încerc să înțeleg detaliile "nivelului mai profund" a modului în care funcționează serverele web. Vreau să știu dacă un server, să zicem că Apache, de exemplu, interoghează continuu cereri noi sau dacă funcționează printr-un sistem de întrerupere. Dacă este o întrerupere, ce provoacă întreruperea? Este driverul cardului de rețea?
Cum poate un server web să asculte cereri noi?
Răspunsul
Contribuitorul la SuperUser Greg Bowser are răspunsul pentru noi:
Răspunsul scurt este un fel de sistem de întrerupere. În esență, folosesc blocarea intrare / ieșire, ceea ce înseamnă că dorm (bloc) în timp ce așteaptă date noi.
- Serverul creează o socket de ascultare și apoi blochează în timp ce așteaptă conexiuni noi. În acest timp, kernelul pune procesul într-un întreruperea somnului stat și execută alte procese. Acesta este un punct important; având procesul de sondaj continuu ar risipi resursele CPU. Kernel-ul este capabil să utilizeze resursele de sistem mai eficient prin blocarea procesului până când nu este de lucru pentru a face acest lucru.
- Când apar noi date în rețea, cardul de rețea emite o întrerupere.
- Văzând că există o întrerupere de pe placa de rețea, kernel-ul, prin intermediul driver-ului cardului de rețea, citește noile date de pe cardul de rețea și le stochează în memorie. (Acest lucru trebuie făcut rapid și este, în general, manipulat în interiorul dispozitivului de tratare a întreruperii.)
- Kernel-ul procesează datele nou sosite și le asociază cu un soclu. Un proces care blochează pe acel soclu va fi marcat ca poate fi executat, ceea ce înseamnă că acesta este acum eligibil pentru a rula. Nu rulează neapărat imediat (kernelul poate decide să ruleze încă alte procese).
- În timpul liber, kernelul va trezi procesul serverului blocat. (Deoarece este acum rulant.)
- Procesul serverului web continuă să se execute ca și cum nu ar fi trecut nici un timp. Apelul său de blocare revine și procesează orice date noi. Apoi treceți la pasul 1.
Aveți ceva de adăugat la explicație? Sunați în comentariile. Doriți să citiți mai multe răspunsuri de la alți utilizatori de tehnologie Stack Exchange? Check out discuția completă aici.