Когато научавате за уеб сървърите и как работят, може да сте любопитни, ако непрекъснато слушат заявки или чакат да получат искане за действие. С оглед на това, днешната публикация SuperUser Q & A има отговорите, за да задоволи любопитството на читателя.
Днешната сесия за въпроси и отговори ни идва с любезното съдействие на SuperUser - подразделение на Stack Exchange - обединяване на уеб сайтове с въпроси и отговори.
Скрийншотът е предоставен от xmodulo / Linux Screenshots (Flickr).
Потребителят на reader user2202911 на SuperUser иска да знае как уеб сървърите слушат нови заявки:
Опитвам се да разбера подробностите за "по-дълбокото ниво" на начина, по който работят уеб сървърите. Искам да знам дали сървър, например Apache, непрекъснато търси за нови заявки или работи по някаква система за прекъсване. Ако това е прекъсване, какво предизвиква прекъсването? Дали това е шофьорът на мрежовата карта?
Как уеб сървър слуша за нови заявки?
Contributor на SuperUser Greg Bowser има отговорът за нас:
Краткият отговор е някаква система за прекъсване. По същество те използват блокиране на I / O, което означава, че спят (блокират) докато чакат нови данни.
- Сървърът създава гнездо за слушане и след това блокира докато чака нови връзки. През това време ядрото поставя процеса в един прекъснат сън състоянието и управлението на други процеси. Това е важен момент; безпроблемното протичане на процеса на изследване би довело до загуба на ресурсите на процесора. Ядрото е в състояние да използва системните ресурси по-ефективно, като блокира процеса, докато не работи за това.
- Когато пристигат нови данни в мрежата, мрежовата карта издава прекъсване.
- Виждайки, че има прекъсване от мрежовата карта, ядрото, чрез драйвера на мрежовата карта, чете новите данни от мрежовата карта и ги съхранява в паметта. (Това трябва да се направи бързо и обикновено се обработва вътре в програмата за прекъсване.)
- Ядрото обработва новопристигналите данни и ги свързва с гнездо. Процес, блокиращ този контакт, ще бъде маркиран като изпълним, което означава, че вече може да се изпълнява. Не е задължително да се изпълнява незабавно (ядрото може да реши да продължи да работи с други процеси).
- В свободното си време ядрото ще събуди процеса на блокиран уеб сървър. (Тъй като вече може да се изпълни.)
- Процесът на уеб сървъра продължава да се изпълнява така, сякаш не е изтекъл срок. Блокиращият му системен разговор се връща и обработва всички нови данни. След това преминете към стъпка 1.
Имате ли нещо, което да добавите към обяснението? Звучи в коментарите. Искате ли да прочетете повече отговори от други потребители на Stack Exchange? Вижте цялата тема на дискусията тук.