使用 --enable-maintainer-zts(使用 php pthread)编译 PHP 时的缺点或副作用


Drawbacks or side-effects when compiling PHP with --enable-maintainer-zts (to use php pthread)

我有一个Web应用程序,并且在生产环境中使用PHP 5.5.5运行良好。

现在在同一台服务器上,我需要运行一些使用 php pthread 的 PHP 脚本(v. 2.0.10)

使用

--enable-maintainer-zts 重建 php(以允许使用 pthreads)并对使用 php-pthread 的 Web 应用程序和 CLI 脚本使用相同的可执行文件是否安全

或者我应该制作两个 PHP 版本:phpphp-zts并将前者用于 Web 应用程序,后者用于 CLI 脚本?

由于默认情况下未启用--enable-maintainer-zts,因此我认为它有一些缺点或更糟(正如我在这里读到的 https://github.com/travis-ci/travis-ci/issues/985)可能会引入不当行为(错误)。

Web 堆栈是 nginx + php-fpm + mySql 在 Mac OS X 10.9.5 上。

我希望清楚一点:phtread不会被Web应用程序脚本使用。仅通过 CLI 脚本。

来自 http://www.phpinternalsbook.com/build_system/building_php.html

(强调我的)

--enable-debug启用调试模式

[...]

--enable-maintainer-zts启用线程安全。

[...]

如果要对代码执行性能基准测试,则不应使用这些选项中的任何一个因为这两个选项都可能导致显著且不对称的减速

--enable-maintainer-zts似乎无害,但会影响性能。因此,在生产环境中绝对不建议这样做。

为了在 CLI 脚本中使用 php pthread,使用 PHP pthread,单独构建带有--enable-maintainer-zts的 PHP 是合适的方法。