If-Koubou

Как уеб сървърите слушат за нови заявки?

Как уеб сървърите слушат за нови заявки? (Как да)

Когато научавате за уеб сървърите и как работят, може да сте любопитни, ако непрекъснато слушат заявки или чакат да получат искане за действие. С оглед на това, днешната публикация SuperUser Q & A има отговорите, за да задоволи любопитството на читателя.

Днешната сесия за въпроси и отговори ни идва с любезното съдействие на SuperUser - подразделение на Stack Exchange - обединяване на уеб сайтове с въпроси и отговори.

Скрийншотът е предоставен от xmodulo / Linux Screenshots (Flickr).

Въпроса

Потребителят на reader user2202911 на SuperUser иска да знае как уеб сървърите слушат нови заявки:

Опитвам се да разбера подробностите за "по-дълбокото ниво" на начина, по който работят уеб сървърите. Искам да знам дали сървър, например Apache, непрекъснато търси за нови заявки или работи по някаква система за прекъсване. Ако това е прекъсване, какво предизвиква прекъсването? Дали това е шофьорът на мрежовата карта?

Как уеб сървър слуша за нови заявки?

Отговорът

Contributor на SuperUser Greg Bowser има отговорът за нас:

Краткият отговор е някаква система за прекъсване. По същество те използват блокиране на I / O, което означава, че спят (блокират) докато чакат нови данни.

  1. Сървърът създава гнездо за слушане и след това блокира докато чака нови връзки. През това време ядрото поставя процеса в един прекъснат сън състоянието и управлението на други процеси. Това е важен момент; безпроблемното протичане на процеса на изследване би довело до загуба на ресурсите на процесора. Ядрото е в състояние да използва системните ресурси по-ефективно, като блокира процеса, докато не работи за това.
  2. Когато пристигат нови данни в мрежата, мрежовата карта издава прекъсване.
  3. Виждайки, че има прекъсване от мрежовата карта, ядрото, чрез драйвера на мрежовата карта, чете новите данни от мрежовата карта и ги съхранява в паметта. (Това трябва да се направи бързо и обикновено се обработва вътре в програмата за прекъсване.)
  4. Ядрото обработва новопристигналите данни и ги свързва с гнездо. Процес, блокиращ този контакт, ще бъде маркиран като изпълним, което означава, че вече може да се изпълнява. Не е задължително да се изпълнява незабавно (ядрото може да реши да продължи да работи с други процеси).
  5. В свободното си време ядрото ще събуди процеса на блокиран уеб сървър. (Тъй като вече може да се изпълни.)
  6. Процесът на уеб сървъра продължава да се изпълнява така, сякаш не е изтекъл срок. Блокиращият му системен разговор се връща и обработва всички нови данни. След това преминете към стъпка 1.

Имате ли нещо, което да добавите към обяснението? Звучи в коментарите. Искате ли да прочетете повече отговори от други потребители на Stack Exchange? Вижте цялата тема на дискусията тук.