Как сервер управляет запросами другого пользователя за один раз?

можно ли сказать мне, как сервер обрабатывает другой запрос HTTP за один раз. Если 10 пользователей вошли в систему сайт, и отправьте запрос для страницы одновременно, что произойдет?

5
задан Charles 24 December 2012 в 21:19
поделиться

5 ответов

Обычно каждый из пользователей отправляет HTTP-запрос на страницу. Сервер получает запросы и делегирует их различным рабочим процессам (процессам или потокам).

В зависимости от указанного URL-адреса сервер считывает файл и отправляет его обратно пользователю. Если файл является динамическим файлом, таким как файл PHP, файл выполняется перед отправкой обратно пользователю.

После того, как запрошенный файл был отправлен обратно, сервер обычно закрывает соединение через несколько секунд.

Дополнительные сведения см.: Веб-серверы HowStuffWorks

7
ответ дан 14 December 2019 в 01:02
поделиться

Запросы будут обрабатываться одновременно, в меру возможностей HTTP-демона.

Обычно демон HTTP порождает несколько процессов или несколько потоков, и каждый из них обрабатывает один клиентский запрос. Сервер может хранить резервные потоки / процессы, чтобы, когда клиент делает запрос, ему не приходилось ждать создания потока / процесса. Каждый поток / процесс может быть сопоставлен с другим процессором или ядром, чтобы их можно было обрабатывать быстрее. Однако в большинстве случаев запросы удерживаются сетевым вводом-выводом, а не отсутствием необработанных вычислений, поэтому часто нет замедления из-за того, что количество процессоров / ядер значительно меньше, чем количество запросов, обрабатываемых за один раз.

0
ответ дан 14 December 2019 в 01:02
поделиться

Сервер (apache) является многопоточным , что означает, что он может запускать несколько программ одновременно. Несколько лет назад один процессор мог быстро переключаться между несколькими потоками, создавая впечатление, что две вещи происходят одновременно. В наши дни компьютеры имеют несколько процессоров, поэтому компьютер может одновременно запускать два потока кода. При этом потоки на самом деле не отображаются на процессоры каким-либо простым способом.

Благодаря этой способности программу PHP можно рассматривать как единый поток выполнения. Если два запроса достигают сервера одновременно, два потока могут использоваться для одновременной обработки запроса. Вероятно, они оба получат примерно одинаковое количество ЦП, поэтому, если они делают одно и то же, они будут завершены примерно в одно и то же время.

Одной из наиболее распространенных проблем с многопоточностью является «состояние гонки», когда два запроса выполняют одно и то же («гонка» за одним и тем же), если это один ресурс, один из них собирается победить. Если они оба вставят запись в базу данных, они не смогут получить одинаковый идентификатор - один из них выиграет.Поэтому вам нужно быть осторожным при написании кода, чтобы понять, что другие запросы выполняются одновременно и могут изменить вашу базу данных, записать файлы или изменить глобальные объекты.

При этом модель программирования позволяет по большей части игнорировать эту сложность.

0
ответ дан 14 December 2019 в 01:02
поделиться

Apache 2 имеет два разных режима работы. Один работает как поточный сервер , другой использует режим, называемый «prefork» ( несколько процессов ).

0
ответ дан 14 December 2019 в 01:02
поделиться

HTTP использует TCP , который является протоколом на основе соединения. То есть клиенты устанавливают TCP-соединение во время связи с сервером.

Несколько клиентов могут одновременно подключаться к одному и тому же порту назначения на одной машине назначения. Сервер просто открывает несколько одновременных подключений.

Apache (и большинство других HTTP-серверов) имеют модуль многопроцессорной обработки ( MPM ). Он отвечает за выделение потоков / процессов Apache для обработки соединений. Затем эти процессы или потоки могут работать параллельно в своем собственном соединении, не блокируя друг друга. MPM Apache также имеет тенденцию поддерживать открытые «резервные» потоки или процессы, даже когда нет открытых соединений, что помогает ускорить последующие запросы.

Программа ab (сокращение от ApacheBench), которая поставляется с Apache, позволяет вам проверить, что происходит, когда вы одновременно открываете несколько подключений к вашему HTTP-серверу.

Файлы конфигурации Apache обычно устанавливают ограничение на количество одновременных подключений, которые он принимает. Будет установлено разумное число, так что во время нормальной работы этот предел никогда не будет достигнут.

Также обратите внимание, что протокол HTTP (начиная с версии 1.1) позволяет поддерживать соединение открытым, чтобы клиент мог сделать несколько HTTP-запросов перед закрытием соединения, потенциально уменьшая количество одновременных подключений, которые им необходимо сделать.

Подробнее о MPM Apache:

Apache может использовать несколько различных модулей многопроцессорной обработки (MPM). Apache 1.x обычно использовал модуль под названием «prefork», который заранее создает ряд процессов Apache, так что входящие соединения часто могут быть отправлены существующему процессу. Это то, что я описал выше.

Apache 2.x обычно использует MPM под названием «worker», который использует многопоточность (выполнение нескольких потоков выполнения в одном процессе) для достижения того же самого. Преимущество многопоточности перед отдельными процессами состоит в том, что многопоточность намного легче по сравнению с открытием отдельных процессов и может даже использовать немного меньше памяти. Это очень быстро.

Недостатком многопоточности является то, что вы не можете запускать такие вещи, как mod_php. Когда вы используете многопоточность, все ваши библиотеки надстроек должны быть «поточно-ориентированными», то есть они должны знать, что работают в многопоточной среде. Сложнее написать многопоточное приложение. Поскольку потоки внутри процесса совместно используют некоторую память / ресурсы между собой, это может легко создать ошибки состояния гонки, когда потоки читают или записывают в память, когда другой поток находится в процессе записи в нее. Чтобы обойти это, требуются такие методы, как блокировка . Многие встроенные библиотеки PHP не являются потокобезопасными, поэтому те, кто желает использовать mod_php, не могут использовать "рабочий" MPM Apache.

2
ответ дан 14 December 2019 в 01:02
поделиться
Другие вопросы по тегам:

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