Является ли PHP потокобезопасным?

  • Является ли PHP (по версии 5.2) потокобезопасным в Linux / UNIX?
  • Можно ли использовать его с Apache Worker-MPM или Event-MPM?

Факты, которые я собрал до сих пор, неубедительны:

  • В двоичных файлах по умолчанию, включенных в большинство дистрибутивов, ZTS отключен, поэтому я знаю, что мне придется перекомпилировать их.
  • Теоретически Zend Engine (core PHP) с включенным ZTS является потокобезопасным.
  • Говорят, что некоторые модули могут быть потокобезопасными, но я не нашел список модулей, которые есть или нет.
  • Часто задаваемые вопросы по PHP часто упоминаются выше.

Каков ваш опыт?

Речь идет не только о сегментационных ошибках («нарушения доступа» в номенклатуре Windows). Существует намного больше возможностей для обеспечения безопасности потоков .

Я знаю, что gettext и set_locale не являются потокобезопасными. PHP не должен использоваться с многопоточным MPM.

PHP еще не в потоковом режиме .
Запуск PHP не с потоком .

См. Где я могу получить библиотеки, необходимые для компиляции некоторых дополнительных PHP-расширений? для списка потокобезопасных и небезопасных расширений (* отмеченные не являются потокобезопасными, а другие -).

Более правильным может быть вопрос: «Является ли следующий код PHP для инициирования нарушений доступа, если используется MPM?» Или: «Испытывали ли вы странное поведение, вероятно, связанное с проблемами параллелизма, используя следующие функции?»

В противном случае это русскую рулетку. Если вы используете какое-то упакованное приложение, оно может работать нормально сейчас, но отрываться через месяц, когда выйдет новая версия приложения.

Я настоятельно рекомендую использовать MPM с PHP в целом. Однако, если у вас есть небольшой код для запуска, вы можете опубликовать его, и мы могли бы сказать вам, если вы собираетесь попасть в ловушку.