PHP под Apache реентерабельный?

Просто теоретический вопрос.

скажем, мой сайт состоит из формы, которая использует почтовые функции PHP для отправки электронной почты. У меня 500 пользователей, которые нажимают кнопку "Отправить" одновременно. Теперь 500 писем в 500 различных сессиях должны быть отправлены из PHP.

это будет сделано одновременно? сколько потоков задействовано? будет ли каждый отправлять блокировать других и делать это один за другим?

2 ответа

Решение

Есть две вещи, о которых вам нужно подумать.

Во-первых, как вы настроили свой веб-сервер. Если вы используете Apache, есть несколько модулей обработки, из которых можно выбрать. Самый популярный модуль обработки - prefork, в котором есть один родительский процесс и несколько дочерних процессов. Каждый ребенок обрабатывает один запрос за раз. Это полностью исключает многопоточность, поскольку не все модули Apache являются поточно-ориентированными. Вы также можете найти рабочий модуль где-нибудь в производстве. Он использует комбинацию разветвления и потоков для обслуживания нескольких запросов на каждого потомка. Он может использоваться только тогда, когда каждый отдельный модуль Apache и все его зависимости являются поточно-ориентированными.

Второе, о чем стоит подумать - это сам PHP. Хотя основной язык PHP и некоторые расширения являются поточно-ориентированными, многие расширения не являются поточно-ориентированными. По этой причине, когда вы используете Apache и mod_php, модуль обработки prefork - ваш лучший выбор. (Сам PHP не имеет внутренней концепции потоков.)

tl; dr: Apache + PHP = один запрос на каждого дочернего элемента Apache. Обычно у вас будет только 20-30 детей Apache, что означает 20-30 возможных одновременных запросов. Это зависит от конфигурации.

На Linux-сервере письма отправляются с использованием локальных sendmail команда. Это немедленно принимает сообщение и возвращает. Остальная часть работы выполняется вашим MTA (асинхронно), который укрепляется и оптимизируется на протяжении десятилетий для таких работ, как эта.

Другие вопросы по тегам