Я знаю, что модуль prefork в apache создает один главный процесс и несколько дочерних процессов для обработки соединений, мой вопрос:
Каждый ли дочерний элемент prefork обрабатывает один связь или обрабатывает один запрос за раз? и если он обрабатывает одно соединение, означает ли это, что каждое новое соединение должно ждать в очереди, чтобы его обработал один из незанятых дочерних процессов? и что это сказать о соединениях keep-alive?
Также у меня такой же вопрос для рабочего модуля mpm, использующего потоки?
Каждый дочерний элемент prefork обрабатывает одно соединение или обрабатывает один запрос за раз?
Каждый дочерний элемент / поток обрабатывает одно соединение (TCP-соединение).
Как только соединение будет закрыто, дочерний процесс будет ждать другого соединения. По одному соединению можно отправить 0, 1 и более запросов (HTTP-запрос).
Если клиент не отправляет запрос, в ваших журналах может быть время ожидания HTTP 408 в зависимости от конфигурации.
С участием KeepAlive Включено, вы можете иметь более 1 HTTP-запроса на одно соединение, так как соединение не будет закрыто после обслуживания первого запроса.
В случае без KeepAlive есть 1 соединение с одним запросом, поэтому может возникнуть вопрос.
каждое новое соединение должно ждать в очереди, чтобы его обработал один из незанятых дочерних процессов?
Да, именно поэтому вы сконфигурируете Apache так, чтобы у него было несколько простаивающих серверов / потоков, чтобы новым соединениям не нужно было ждать создания новых дочерних процессов / потоков. Если дочернего процесса недостаточно, новый будет создан по мере необходимости и в соответствии с ограничениями в конфигурации.
Пока что для моего собственного понимания процесса.