Why shouldn't I use Apache2 with a threaded MPM in a production environment?
"PHP is glue. It is the glue used to build cool web applications by sticking dozens of 3rd-party libraries together and making it all appear as one coherent entity through an intuitive and easy to learn language interface. The flexibility and power of PHP relies on the stability and robustness of the underlying platform. It needs a working OS, a working web server and working 3rd-party libraries to glue together. When any of these stop working PHP needs ways to identify the problems and fix them quickly. When you make the underlying framework more complex by not having completely separate execution threads, completely separate memory segments and a strong sandbox for each request to play in, feet of clay are introduced into PHP's system."
https://www.php.net/manual/en/faq.installation.php#faq.installation.apache2
"PHP - это клей. Клей, используемый для построения классных web приложений, склеивая дюжины сторонних библиотек и создавая впечатление одного согласованного целого, с помощью интуитивного и легко изучаемого языка. Гибкость и мощь PHP полагается на стабильность и устойчивость используемой платформы. Для склейки вместе ему необходимы работающая ОС, работающий web сервер и работающие сторонние библиотеки. Когда что-либо из этого перестаёт работать PHP нужны способы определения проблем и их быстрого исправления. Если вы усложняете низлежащую систему, не разделяя полностью потоки выполнения, не выделяя раздельные сегменты памяти и не предоставляя "песочницу" для игры для каждого запроса, то ваша PHP система увязнет в глине."
https://www.php.net/manual/ru/faq.installation.php#faq.installation.apache2
То есть, вместо внятного объяснения авторы почти открыто говорят: "мы написали такую какашку, что не гарантируем правильную работу с памятью, поэтому если уж вас угораздило её запустить, лучше делать это в отдельной песочнице, чтоб она вместе с собой не уронила соседние треды".
via
nikulina
"PHP is glue. It is the glue used to build cool web applications by sticking dozens of 3rd-party libraries together and making it all appear as one coherent entity through an intuitive and easy to learn language interface. The flexibility and power of PHP relies on the stability and robustness of the underlying platform. It needs a working OS, a working web server and working 3rd-party libraries to glue together. When any of these stop working PHP needs ways to identify the problems and fix them quickly. When you make the underlying framework more complex by not having completely separate execution threads, completely separate memory segments and a strong sandbox for each request to play in, feet of clay are introduced into PHP's system."
https://www.php.net/manual/en/faq.installation.php#faq.installation.apache2
"PHP - это клей. Клей, используемый для построения классных web приложений, склеивая дюжины сторонних библиотек и создавая впечатление одного согласованного целого, с помощью интуитивного и легко изучаемого языка. Гибкость и мощь PHP полагается на стабильность и устойчивость используемой платформы. Для склейки вместе ему необходимы работающая ОС, работающий web сервер и работающие сторонние библиотеки. Когда что-либо из этого перестаёт работать PHP нужны способы определения проблем и их быстрого исправления. Если вы усложняете низлежащую систему, не разделяя полностью потоки выполнения, не выделяя раздельные сегменты памяти и не предоставляя "песочницу" для игры для каждого запроса, то ваша PHP система увязнет в глине."
https://www.php.net/manual/ru/faq.installation.php#faq.installation.apache2
То есть, вместо внятного объяснения авторы почти открыто говорят: "мы написали такую какашку, что не гарантируем правильную работу с памятью, поэтому если уж вас угораздило её запустить, лучше делать это в отдельной песочнице, чтоб она вместе с собой не уронила соседние треды".
via
Стоит быть немного внимательнее...
Осталось задаться вопросом что есть underlying framework для PHP applications...
Re: Стоит быть немного внимательнее...
Re: Стоит быть немного внимательнее...
А теперь, представим, что у нас есть глобальная переменная во внешней библиотеке, скажем, в ZLIB, и два потока апача. Что будет если они оба, одновременно, полезут менять эту переменную?
Re: Стоит быть немного внимательнее...
но именно по этому случаю у большинства библиотек существуют thread-safe версии. было бы дело именно в этом, имело бы смысл явно написать: убедитесь, что вы использовали именно эти версии библиотек при сборке php для работы в мультитредном апаче, а то будет плохо. а не обвинять какие-то абстрактные 3-d party в кривизне.
no subject
Кстати, есть еще один хороший вопрос - а чем, вообще, Threaded MPM лучше Prefork'a под линуксом ,-)
no subject
лучше он, как всегда, тем, что создание/уничтожение треда - гораздо менее ресурсоёмкая операция, чем создание/уничтожение процесса.