PHP: Что делает pcntl_fork (), действительно делают?

Функция pcntl_fork PHP, как предполагается, разветвляет процесс так же, как стандартную функцию ветвления в C.
Но я задавался вопросом, разветвляет ли эта функция действительно процесс или если это эмулирует то поведение по-другому.
Если это действительно разветвляет процесс затем, это ясно, которые обрабатывают, который является: один из дочерних процессов Apache.
Это в порядке, пока Apache использует предварительное ветвление MPM (т.е. один процесс на запрос).
Но что действительно происходит, если Apache использует рабочего MPM??
Когда рабочий, MPM используется, каждый дочерний процесс Apache, содержит много потоков, каждый обрабатывающий различный Запрос HTTP. Таким образом, если Вы разветвили бы процесс под той ситуацией, я не могу даже думать, что было бы, произошел со всеми теми потоками и подаваемыми запросами.
Таким образом, если pcntl_fork () действительно разветвляет процесс затем, я думаю, что это не хорошая идея использовать эту функцию при установке Apache для использования рабочего MPM.

Что говорят эксперты? Я рассуждаю хорошо, или я просто говорю ерунду?

13
задан Benjamin 8 June 2013 в 15:51
поделиться

2 ответа

PCNTL_FORK , вероятно, работает, как вы думаете, это будет: это вилки текущего процесса, так же, как функциональная вилка C делает:

Функция PCNTL_FORK () создает Детский процесс, который отличается от родительский процесс только в его PID и PPID.
Пожалуйста, смотрите вашу систему Fork (2) Страница человека для конкретных детали относительно того, как Fork работает на вашем система.


Но цитируя введение в раздел раздел Руководство:

Поддержка контроля процесса в PHP реализует стиль процесса Unix Создание, выполнение программы, сигнал Обращение и переработка процесса.
Контроль процесса не должен быть включен в веб-сервере Окружающая среда и неожиданные результаты могут случиться, если какой-либо контроль процесса Функции используются на веб-сервере среда.

Итак, вы на самом деле не должны использовать эту функцию из сценария PHP, выполняемого через Apache: его следует использовать только при выполнении вашего сценария PHP из командной строки.


И, прежде чем начать использовать эту функцию, не забывайте, что:

Примечание: это расширение недоступно на платформах Windows.

21
ответ дан 1 December 2019 в 21:12
поделиться

Это не хорошая идея для запуска PHP в качестве модуля на установке Apache, настроенной для рабочего MPM в первую очередь, поскольку PHP не ThreadSafe (я думаю, что это также указано в руководстве PHP).

Он должен вил процесс, да. Руководство PHP даже говорится, что вы должны прочитать MAN FORK (2) для дальнейших инструкций, так что это, вероятно, просто обертка вокруг функции CH FORK.

Обновление : Вот соответствующая страница в руководстве PHP для MPM MPM: http://php.net/install.unix.apache2.php

Примечание. Для создания многопоточной версии Apache целевая система должна поддерживать потоки. В этом случае PHP также должен быть построен с экспериментальной безопасности Zend потоков (ZTS). При этой конфигурации не все расширения будут доступны. Рекомендуемая настройка - создать Apache с помощью MPM-модуля Perfork по умолчанию.

Я также нашел эту страницу с некоторыми дополнительными инструкциями: http://www.stevekallestad.com/blog/apache_worker_mpm_with_php.html

3
ответ дан 1 December 2019 в 21:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: