If-Koubou

Cum ascultă Serverele Web pentru noile solicitări?

Cum ascultă Serverele Web pentru noile solicitări? (Cum să)

Când învățați despre serverele web și cum funcționează acestea, puteți fi curios dacă ascultă în mod constant solicitările sau dacă așteaptă până când vor primi o cerere de acțiune. Având în vedere acest lucru, 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 Q & A.

Captură de ecran prin amabilitatea screenshoturilor xmodulo / Linux (Flickr).

Intrebarea

Utilizatorul SuperUser user2202911 dorește să știe cum serverele web ascultă pentru noi cereri:

Încerc să înțeleg detaliile "nivelului mai profund" cu privire la modul în care funcționează serverele web. Vreau să știu dacă un server, să zicem că Apache, de exemplu, interoghează continuu cererile noi sau dacă funcționează printr-un sistem de întrerupere. Dacă este o întrerupere, ceea ce sporește întreruperea? Este driverul cardului de rețea?

Cum asculta un server web cereri noi?

Răspunsul

Contribuitorul pentru SuperUser Greg Bowser are răspunsul pentru noi:

Răspunsul scurt este un fel de sistem de întrerupere. În esență, folosesc I / O de blocare, adică ei dorm (blochează) în timp ce așteaptă date noi.

  1. Serverul creează o priză de ascultare și apoi blochează în timp ce așteaptă conexiuni noi. În acest timp, kernelul pune procesul într-un proces întreruperea somnului stat și execută alte procese. Acesta este un punct important; având procesul de sondaj continuu ar risipi resursele CPU. Kernelul este capabil să utilizeze resursele de sistem mai eficient prin blocarea procesului până când nu este nevoie de lucru pentru a face acest lucru.
  2. Când apar noi date în rețea, cardul de rețea emite o întrerupere.
  3. 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.)
  4. Kernelul procesează datele nou sosite și le asociază cu un soclu. Un proces care blochează acel soclu va fi marcat ca alertă, ceea ce înseamnă că este acum eligibil pentru a rula. Nu rulează neapărat imediat (kernelul poate decide să ruleze încă alte procese).
  5. În timpul liber, kernel-ul va trezi procesul blocat de server web. (Din moment ce se poate rula acum.)
  6. Procesul de server web continuă să se execute ca și cum nu ar fi trecut nici un timp. Apelul său de blocare se întoarce și procesează orice date noi. Apoi treceți la pasul 1.

Aveți ceva de adăugat la explicație? Sunați în comentarii. Doriți să citiți mai multe răspunsuri de la alți utilizatori de tehnologie Stack Exchange? Check out discuția completă aici.