Что такое происходит, когда к хосту поступает несколько запросов?

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

Например, предположим, что два пользователя нажимают кнопку, чтобы зарезервировать продукт на веб-сайте. Допустим, сайту требуется 20 секунд, чтобы зарезервировать продукт в базе данных. Запрос пользователя A сначала попадает на сервер. Но пользователю B не нужно ждать завершения запроса A, верно? Это почему? Что происходит, что позволяет одновременно обрабатывать несколько запросов? Обрабатывает ли сервер небольшую часть каждого запроса, а затем переключается на другой запрос и выполняет его небольшую часть и т. Д.? Запускает ли сервер новый процесс для каждого запроса, который выполняется постоянно?

Я понимаю, что на этот вопрос могут быть разные ответы, но каковы некоторые из общих.

-1
задан 19 April 2020 в 19:24
2 ответа

Основная теория называется многозадачностью. Это довольно сложная тема. Вы можете прочитать об этом подробнее здесь .

0
ответ дан 4 January 2021 в 10:26

Вот краткий обзор. Я уверен, что я ошибаюсь, и что кто-то укажет на это.

Серверы, такие как Apache и Nginx, являются многопоточными приложениями и обычно запускают несколько потоков при запуске, часто называемых Workers. Каждый поток будет способен обрабатывать ряд соединений, обычно указанных в файле конфигурации.

Пока рабочие потоки, основные процессы http обычно однопоточные и управляют потоками, которые он порождал. Это происходит потому, что некоторые операции потокобезопасны , а другие нет. Например, запись в файл журнала обычно небезопасна для потоков. См. Эту вики для получения подробной информации о потоках .

Базовый пример

Если мы возьмем HTTP в качестве примера;

Три человека запрашивают одни и те же или, возможно, разные страницы. Рабочий отвечает на запрос, который поступает на порт прослушивания процесса HTTP (обычно порт 80). HTTP-сервер обрабатывает запрос и отправляет ответ на другой порт, обычно это высокий порт, такой как 54501 или 34667. Ответ и полезная нагрузка от HTTP-сервера не возвращаются на порт 80.

Часто возникает ошибка. Значение KeepAlive, настроенное на HTTP-сервере, которое поддерживает это соединение до истечения времени ожидания, если дальнейшая связь отсутствует. Если получено дальнейшее сообщение, рабочий уже настроен и готов к работе. Если больше нет связи, рабочий закрывает соединение, и оно либо прерывается, либо остается в режиме ожидания, ожидая нового соединения, в зависимости от того, как оно было настроено.

Apache , например, может иметь следующее;

<IfModule prefork.c>
   StartServers       4
   MinSpareServers    4
   MaxSpareServers   8
   ServerLimit      256
   MaxClients       256
   MaxRequestsPerChild  10000
</IfModule>  

Это в основном указывает Apache при запуске запустить 4 сервера, иметь 4 в резерве на случай, если они понадобятся, и запустить максимум 256, каждый из которых обслуживает до 256 соединений.

Nginx с другой стороны, пользователи " worker_connections "

Вы также можете назначать рабочих на определенные ядра ЦП и указывать другие тонкие настройки, такие как приоритет и т. Д.

То, как операционная система обрабатывает потоки, варьируется от одного к другому, например, Linux делает что-то отличается от Windows.

Многие серверы основаны на Linux или Unix, потому что они работают без графического интерфейса пользователя, тем самым выделяя все ресурсы на то, для чего он был разработан. Графический интерфейс потребляет много ресурсов!

Здесь очень краткое объяснение, и я надеюсь, что это поможет. Я уверен, что кое-что ошибся, но это дает вам некоторое представление.

0
ответ дан 4 January 2021 в 10:26

Теги

Похожие вопросы