【问题标题】:Why PHP has separate version of ts(thread safe)/nts(non thread safe) while it doesn't support multi-threading?为什么 PHP 有单独版本的 ts(线程安全)/nts(非线程安全),而它不支持多线程?
【发布时间】:2011-04-28 09:18:38
【问题描述】:

我认为标题很清楚。

【问题讨论】:

  • 我认为正确地表达问题主体仍然是礼貌的。
  • 我记得读过类似的东西:IIS=NTS & Apache=TS
  • @jnpcl 通常情况正好相反。但在 Apache 的情况下,它确实取决于使用的 Apache MPM。例如,Windows 上的 Apache 只能使用线程。
  • PHP 支持多线程已经很长时间了 - 但是 PHP 开发人员明智地指出他们不知道哪些第三方扩展(其中大量与 PHP 捆绑在一起)是线程-安全

标签: php thread-safety


【解决方案1】:

虽然您无法从 PHP 代码生成线程,但您可以将 PHP 与处理不同线程上的并发请求的多线程 Web 服务器一起使用。在这种情况下,应该使用 TS(线程安全)版本的 PHP。

PHP 的 TS 版本将每个请求的状态保存在自己的内存位置。这是必要的,因为多线程服务器中的所有请求共享相同的地址空间。

另一种方法是使用多进程(通常是 prefork)服务器。使用这样的服务器,一些状态可以保存在全局变量中,而不会影响并发请求。这就是 PHP 的 NTS(非线程安全)版本的实现方式。

【讨论】:

  • 他们为什么不一直使用线程安全?非线程安全有什么好处吗?
猜你喜欢
  • 2010-12-10
  • 2011-03-30
  • 1970-01-01
  • 2014-03-10
  • 2011-11-04
  • 2022-11-21
相关资源
最近更新 更多