Необходимая справка по подходам параллелизма:
Различные веб-серверы реализуют разные методы для параллельной обработки входящих HTTP-запросов. Довольно популярным методом является использование потоков, то есть веб-сервер будет создавать / выделять отдельный поток для каждого входящего запроса. HTTP-сервер Apache поддерживает несколько моделей для обработки запросов, одна из которых (называемая рабочим MPM) использует потоки. Но он поддерживает другую модель параллелизма, называемую prefork MPM, которая использует процессы, то есть веб-сервер будет создавать / выделять отдельный процесс для каждого запроса.
Существуют также другие совершенно разные модели параллелизма (использующие асинхронные сокеты и ввод / вывод), а также модели, которые смешивают две или даже три модели вместе. Для ответа на этот вопрос нас интересуют только две модели, приведенные выше, и в качестве примера используется HTTP-сервер Apache.
Необходимая информация о том, как PHP "интегрируется" с веб-серверами:
PHP сам по себе не отвечает на реальные HTTP-запросы - это работа веб-сервера. Поэтому мы настраиваем веб-сервер для пересылки запросов в PHP на обработку, затем получаем результат и отправляем его обратно пользователю. Есть несколько способов связать веб-сервер с PHP. Для Apache HTTP Server самым популярным является «mod_php». Этот модуль фактически является самим PHP, но скомпилирован как модуль для веб-сервера, и поэтому он загружается прямо в него.
Существуют и другие способы связывания PHP с Apache и другими веб-серверами, но mod_php является наиболее популярным и будет также использоваться для ответа на ваш вопрос.
Возможно, вам раньше не нужно было разбираться в этих деталях, потому что хостинговые компании и дистрибутивы GNU / Linux поставляются со всем подготовленным для нас.
Теперь на ваш вопрос!
Так как с mod_php PHP загружается прямо в Apache, если Apache собирается обрабатывать параллелизм с помощью своего Worker MPM (то есть с помощью Threads), то PHP должен быть способен работать в этой же многопоточной среде, то есть PHP должен быть поточно-ориентированным, чтобы правильно играть в мяч с Apache!
На этом этапе вы должны подумать: «Хорошо, поэтому, если я использую многопоточный веб-сервер и собираюсь встроить PHP прямо в него, тогда я должен использовать поточно-ориентированную версию PHP» , И это будет правильное мышление. Однако, как это случается, безопасность потока PHP оспаривается . Это площадка для использования, если вы действительно действительно знаете, что вы делаете.
Заключительные ноты
Если вам интересно, мой личный совет: не использовать PHP в многопоточной среде, если у вас есть выбор!
Говоря только о средах на основе Unix, я бы сказал, что, к счастью, вам нужно думать об этом, только если вы собираетесь использовать PHP с веб-сервером Apache, и в этом случае вам рекомендуется использовать prefork MPM Apache (который не использует потоки, и, следовательно, безопасность потоков PHP не имеет значения) и все известные мне дистрибутивы GNU / Linux примут это решение за вас, когда вы устанавливаете Apache + PHP через их систему пакетов, без даже побуждает вас к выбору. Если вы собираетесь использовать другие веб-серверы, такие как nginx или lighttpd , у вас все равно не будет возможности встраивать в них PHP. Вы будете использовать FastCGI или что-то такое же, что работает в другой модели, где PHP полностью вне веб-сервера с несколькими процессами PHP, используемыми для ответа на запросы, например, через. FastCGI. В таких случаях безопасность потоков также не имеет значения. Чтобы узнать, какую версию использует ваш веб-сайт, поместите файл, содержащий <?php phpinfo(); ?>
, на свой сайт и найдите запись Server API
. Это может сказать что-то вроде CGI/FastCGI
или Apache 2.0 Handler
.
Если вы также посмотрите на версию PHP для командной строки - безопасность потоков не имеет значения.
Наконец, если потокобезопасность не имеет значения, какую версию следует использовать - поточно-безопасную или не поточно-безопасную? Честно говоря, у меня нет научного ответа! Но я бы предположил, что не поточнобезопасная версия быстрее и / или менее глючная, иначе они бы просто предложили поточнобезопасную версию и не удосужились бы дать нам выбор!