PHP线程安全吗?

时间:2009-03-25 10:58:12

标签: php multithreading thread-safety

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

到目前为止我收集的事实尚无定论:

  • 大多数发行版中包含的默认二进制文件都禁用了ZTS,所以我知道,我必须重新编译它们。
  • 理论上,启用ZTS的Zend Engine(核心PHP)是线程安全的。
  • 据说有些模块可能不是线程安全的,但是我没有找到任何模块列表。
  • PHP FAQ与上述情况完全相同。

你的经历是什么?

这不仅仅是segmentation faults(Windows命名法中的“访问违规”)。 thread safety还有很多其他内容。

3 个答案:

答案 0 :(得分:23)

我知道gettext而且set_locale不是线程安全的。 PHP不应该与线程MPM一起使用。

PHP Isn't Thread-Safe Yet
Running PHP not threaded

答案 1 :(得分:6)

请参阅 Where can I get libraries needed to compile some of the optional PHP extensions? 以获取线程安全和非线程安全扩展的列表(*标记的不是线程安全的,其他的是扩展名。)

答案 2 :(得分:5)

更好的问题可能是,“如果使用MPM,以下PHP代码是否会触发访问冲突?”或者,“您是否经历过使用以下功能导致并发问题的奇怪行为?”

否则,它是俄罗斯轮盘赌。如果你正在使用一些打包的应用程序,它现在可以正常工作,但是从新版本的应用程序发布后的一个月就会中断。

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