Создание нового процесса для каждого запроса веб-страницы? - PullRequest
9 голосов
/ 02 марта 2011

Это может быть простой вопрос, но каждый раз, когда пользователь вызывает файл php с сервера, он создает новый процесс с этого сервера?

Например, у меня есть базовая форма (скажем, по индексу.php), который отправляет текст в другой файл php.В этом php-файле я печатаю posix_getpid () .

. Я открыл на двух вкладках свой index.php заполненный и отправил текст, и в итоге у меня было два разных pid на каждомtab.

Что привело меня к выводу, что сервер, вероятно, создает новый процесс для каждого сценария.Я прав?

Ура!

Ответы [ 2 ]

5 голосов
/ 02 марта 2011

Я предполагаю, что вы используете Apache в качестве веб-сервера.

Когда приходит запрос, apache запускает новый поток. Затем на этом новом тераде вызывается PHP, поэтому каждый раз вы получаете новый идентификатор процесса.

Это, конечно, сильно упрощено.

Я рекомендую прочитать эту статью для более глубокого понимания.

Редактировать: Кажется, что процесс отличается на разных платформах. Он работает так, как я описал выше для Windows, но в Unix выполняется несколько процессов Apache.

0 голосов
/ 20 июня 2019

Существует несколько способов связать веб-сервер с помощью PHP.

Для Apache HTTP Server наиболее популярным является "mod_php".Этот модуль фактически является самим PHP, но скомпилирован как модуль для веб-сервера, и поэтому он загружается прямо в него.Поскольку с mod_php, PHP загружается прямо в Apache, если Apache собирается обрабатывать параллелизм, используя свой Worker MPM (то есть, используя Threads)

И здесь есть ловушка для таких вещей, как setlocale().

С Nginx у вас не будет возможности вставлять в него PHP.Следовательно, PHP полностью находится за пределами веб-сервера с несколькими PHP processes.

И это хорошо, потому что PHP может делать вещи на более низком уровне, например, изменение locales И setlocale() НЕ является многопоточнымсейф.

...