Назад | Перейти на главную страницу

Как apache обрабатывает соединения и запросы с использованием модулей mpm worker и prefork?

Я знаю, что модуль prefork в apache создает один главный процесс и несколько дочерних процессов для обработки соединений, мой вопрос:

Каждый ли дочерний элемент prefork обрабатывает один связь или обрабатывает один запрос за раз? и если он обрабатывает одно соединение, означает ли это, что каждое новое соединение должно ждать в очереди, чтобы его обработал один из незанятых дочерних процессов? и что это сказать о соединениях keep-alive?

Также у меня такой же вопрос для рабочего модуля mpm, использующего потоки?

Каждый дочерний элемент prefork обрабатывает одно соединение или обрабатывает один запрос за раз?

Каждый дочерний элемент / поток обрабатывает одно соединение (TCP-соединение).

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

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

С участием KeepAlive Включено, вы можете иметь более 1 HTTP-запроса на одно соединение, так как соединение не будет закрыто после обслуживания первого запроса.

В случае без KeepAlive есть 1 соединение с одним запросом, поэтому может возникнуть вопрос.

каждое новое соединение должно ждать в очереди, чтобы его обработал один из незанятых дочерних процессов?

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

Пока что для моего собственного понимания процесса.