Как веб-серверы прослушивают новые запросы?

Когда вы узнаете о веб-серверах и о том, как они работают, вам может быть любопытно, постоянно ли они слушают запросы или ждут, пока не получат запрос, чтобы начать действовать. Имея это в виду, в сегодняшнем посте SuperUser Q & A есть ответы, чтобы удовлетворить любопытство читателя.

Сегодняшняя сессия вопросов и ответов приходит к нам благодаря SuperUser — подразделению Stack Exchange, группы веб-сайтов вопросов и ответов, управляемой сообществом.

Снимок экрана предоставлен xmodulo/Linux Screenshots (Flickr).

Вопрос

Читатель SuperUser user2202911 хочет знать, как веб-серверы прослушивают новые запросы:

Я пытаюсь понять подробности о том, как работают веб-серверы. Я хочу знать, если сервер, скажем, Apache, например, постоянно опрашивает новые запросы или работает ли он какой-то системой прерываний. Если это прерывание, что вызывает прерывание? Это драйвер сетевой карты?

Как веб-сервер прослушивает новые запросы?

Ответ

У автора SuperUser Грега Баузера есть ответ для нас:

Короткий ответ — это какая-то система прерываний. По сути, они используют блокирующий ввод/вывод, что означает, что они спят (блокируются), ожидая новых данных.

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

Есть что добавить к объяснению? Отключить звук в комментариях. Хотите узнать больше ответов от других опытных пользователей Stack Exchange? Ознакомьтесь с полной веткой обсуждения здесь.

Оцените статью
TutoryBird.Ru
Добавить комментарий