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

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

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

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

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

    Вопрос

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

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

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

    Ответ

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

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

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

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