Як веб-сервери слухають для нових запитів?
Дізнавшись про веб-сервери і як вони працюють, вам буде цікаво, якщо вони постійно слухають запити або якщо вони чекають, поки вони не отримають запит на вступ. Маючи це на увазі, сьогоднішня посада із запитами та відповідями SuperUser має відповіді, які задовольняють цікавість читача.
Сьогоднішня сесія запитань та відповідей приходить до нас люб'язно SuperUser - підрозділ Stack Exchange, групування веб-сайтів із запитаннями та відповідями на рівні спільноти..
Скріншот, наданий xmodulo / Скріншоти Linux (Flickr).
Питання
Читач SuperUser user2202911 хоче знати, як веб-сервери слухають нові запити:
Я намагаюся зрозуміти деталі "більш глибокого рівня" роботи веб-серверів. Я хочу знати, якщо сервер, скажімо, Apache, наприклад, постійно опрацьовує нові запити або якщо він працює за допомогою якоїсь системи переривань. Якщо це переривання, що викликає переривання? Це драйвер мережевої карти?
Як веб-сервер прослуховує нові запити?
Відповідь
Співробітник SuperUser Грег Боузер має відповідь для нас:
Коротка відповідь - це якась система переривань. По суті, вони використовують блокування вводу-виводу, тобто вони сплять (блокують) під час очікування нових даних.
- Сервер створює прослуховуючий сокет, а потім блокує під час очікування нових з'єднань. Протягом цього часу ядро переводить процес у переривний сон Держава і виконує інші процеси. Це важливий момент; безперервне проведення опитування призведе до втрати ресурсів процесора. Ядро здатне більш ефективно використовувати системні ресурси, блокуючи процес, поки не буде працювати для нього.
- Коли нові дані надходять у мережу, мережева карта видає переривання.
- Бачачи переривання з мережевої карти, ядро через драйвер мережевої карти читає нові дані з мережевої карти і зберігає їх у пам'яті. (Це має бути зроблено швидко і, як правило, обробляється в обробнику переривань.)
- Ядро обробляє нещодавно отримані дані і зв'язує його з сокетом. Процес, який блокує цей сокет, буде позначено як виконуваний, тобто тепер він може працювати. Він не обов'язково запускається негайно (ядро може прийняти рішення про виконання інших процесів).
- У вільний час ядро розбудить заблокований процес веб-сервера. (Оскільки воно зараз виконується.)
- Процес веб-сервера продовжує виконуватися так, ніби час не пройшов. Його блокує системний виклик, і він обробляє будь-які нові дані. Потім перейдіть до кроку 1.
Маєте щось додати до пояснення? Звучить в коментарях. Хочете прочитати більше відповідей від інших технологічних користувачів Stack Exchange? Перегляньте повний потік обговорення тут.