HTTP использует TCP , который является протоколом на основе соединения.Это значит, что клиенты устанавливают соединение TCP во время связи с сервером.
Несколько клиентов могут подключаться к одному и тому же порту назначения на одном и том же компьютере назначения одновременно.Сервер просто открывает несколько одновременных подключений.
Apache (и большинство других HTTP-серверов) имеет модуль мультиобработки ( MPM ).Это отвечает за распределение потоков / процессов Apache для обработки соединений.Эти процессы или потоки могут затем работать параллельно на своем собственном соединении, не блокируя друг друга.Apache MPM также имеет тенденцию сохранять открытые «резервные» потоки или процессы, даже когда нет открытых соединений, что помогает ускорить последующие запросы.
Программа 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.