关于多线程:PHP线程安全吗?

Is PHP thread-safe?

  • 在Linux/Unix上,PHP(从5.2开始)线程是否安全?
  • 是否可以将它与Apache Worker MPM或Event MPM一起使用?

到目前为止,我收集到的事实还没有定论:

  • 大多数发行版中包含的默认二进制文件都禁用了ZT,所以我知道我必须重新编译它们。
  • 理论上,启用ZTS的Zend引擎(核心PHP)是线程安全的。
  • 据说有些模块可能不是线程安全的,但我没有找到任何模块列表。
  • php faq的状态和上面的差不多。

你有什么经验?

这不仅与分段错误有关(Windows术语中的"访问冲突")。螺纹安全还有很多。


我知道gettext和set_locale不是threadsafe。PHP不应与线程MPM一起使用。

PHP还不是线程安全的。运行php不是线程化的。


在哪里可以获得编译某些可选PHP扩展所需的库?对于线程安全扩展和非线程安全扩展的列表(*标记为非线程安全扩展和其他扩展)。


一个更好的问题可能是,"如果使用MPM,下面的PHP代码会触发访问冲突吗?"或者,"您是否经历过可能归因于使用以下函数的并发性问题的奇怪行为?"

否则,就是俄罗斯轮盘赌。如果您使用的是一些打包的应用程序,那么它现在可能工作得很好,但从现在起一个月后,当新版本的应用程序出现时,它就会中断。

我强烈建议不要在PHP中使用MPM。但是,如果您有一些小代码要运行,您可以发布它,我们可以告诉您是否会遇到陷阱。