На основании описаний как для Prefork и Рабочий MPM, кажется, что тип prefork несколько устарел, но я не могу найти правильного сравнения этих двух типов.
Что бы я хотел знать:
Как говорится в документации, вы должны использовать prefork MPM, если вам нужно избегать потоковой передачи для совместимости с небезопасными библиотеками. Обычно любой нетривиальный модуль Apache (mod_php
- или, точнее говоря, бесчисленное множество расширений и библиотек, на которые он ссылается - что является каноническим примером) имеет какую-то небезопасную для потоков библиотеку (или содержит в ней небезопасный код), поэтому, если вы Я использую довольно стандартную установку Apache, я бы выбрал prefork MPM.
Классическим решением для запуска небезопасных расширений при обслуживании большого количества (> 100) одновременных подключений является запуск PHP на fastCGI (mod_fcgid, собственный модуль apache) и прокси-динамические запросы к нему от экземпляра apache, который запускает Worker MPM.
Это позволит вам масштабироваться от нескольких сотен до> 1000 одновременных подключений с небольшим объемом памяти (4 ~ 8 ГБ) при обслуживании сочетания статического и динамического контента.
Конечно, вам также следует изучить решения для внешнего кэширования как часть вашего общего развертывания (memcached, varnish).
В качестве альтернативы обновитесь до apache 2.4 и его родной версии. мероприятие MPM, который обрабатывает параллелизм значительно улучшенным способом (потоки запускаются при соединении, не ожидая опроса).
Прошло около трех лет с тех пор, как вопрос был опубликован, но я бы рекомендовал вам использовать рабочий MPM вместо предварительного форка, даже если вы используете PHP, чтобы получить лучшую производительность.
Что касается различий, предварительная вилка не является поточной, поэтому сервер создает процесс для каждого клиентского запроса (он выполняет предварительную вилку в ожидании новых запросов, чтобы разветвление не уменьшало время ответа). Поскольку запросы выполняются сервером в отдельном процессе, это обычно намного больше нагружает вашу память и процессор. Рабочий обеспечивает многопоточность, которая легче и лучше использует память.
Это очень специфично для того, что вы обслуживаете. Если вы делаете много небольших статических подключений, потоки будут легче и быстрее. Если у вас постоянно создается несколько больших приложений, prefork может иметь преимущество благодаря своей зрелости и стабильности. Почему бы просто не настроить то, что вам нужно, протестировать один, заменить модуль MPM, попробовать еще раз и посмотреть, какой из них вам больше подходит?
что необходимо в зависимости от типа и типа вашего трафика. А также для начала нужно понять главное отличие префорка от воркера. Надеюсь, статья ниже поможет вам разобраться! http://slashroot.in/how-is-nginx-different-from-apache