Как уеб сървърите слушат за нови искания?
Когато научавате за уеб сървърите и как те работят, може да сте любопитни дали постоянно слушат за заявки или ако изчакват, докато получат искане за действие. Имайки това предвид, днешната публикация на суперпотребителите отговаря на любопитството на читателя.
Днешната сесия за въпроси и отговори идва при нас с любезното съдействие на SuperUser - подразделение на Stack Exchange, групирано от общността уеб сайтове за въпроси и отговори.
Снимка на екрана с любезното съдействие на xmodulo / Скрийншоти на Linux (Flickr).
Въпроса
Четецът на SuperUser user2202911 иска да знае как уеб сървърите слушат за нови заявки:
Опитвам се да разбера подробностите за „по-дълбокото ниво“ на работата на уеб сървърите. Искам да знам дали даден сървър, например Apache, непрекъснато проверява нови заявки или работи с някаква прекъсваща система. Ако това е прекъсване, какво предизвиква прекъсването? Това е драйверът на мрежовата карта?
Как уеб сървърът слуша за нови заявки?
Отговорът
Сътрудникът на SuperUser Грег Боузър има отговор за нас:
Краткият отговор е някаква прекъсваща система. По същество те използват блокиращ вход / изход, което означава, че спят (блокират), докато чакат за нови данни.
- Сървърът създава слушален сокет и след това блокира докато чака за нови връзки. През това време ядрото поставя процеса в прекъсваем сън състояние и изпълнява други процеси. Това е важен момент; непрекъснатото провеждане на процеса ще изгуби ресурсите на процесора. Ядрото е в състояние да използва системните ресурси по-ефективно, като блокира процеса, докато не се работи за него.
- Когато нови данни пристигнат в мрежата, мрежовата карта издава прекъсване.
- Виждайки, че има прекъсване от мрежовата карта, ядрото, чрез драйвера на мрежовата карта, чете новите данни от мрежовата карта и ги съхранява в паметта. (Това трябва да се направи бързо и обикновено се обработва вътре в обработващия прекъсване.)
- Ядрото обработва новодошлите данни и ги свързва със сокет. Процес, който блокира в този сокет, ще бъде отбелязан като изпълним, което означава, че вече отговаря на условията за изпълнение. Не е задължително да се стартира незабавно (ядрото може да реши да изпълни други процеси все още).
- В свободното си време ядрото ще събуди процеса на блокиран уеб сървър. (Тъй като сега е изпълним.)
- Процесът на уеб сървъра продължава да се изпълнява, сякаш не е минало време. Неговата блокираща система се връща и обработва всички нови данни. След това преминете към стъпка 1.
Имате ли какво да добавите към обяснението? Звучи в коментарите. Искате ли да прочетете повече отговори от други технологични потребители на Stack Exchange? Вижте пълната тема за дискусия тук.