为什么 PHP ZTS 默认是关闭的?
Why PHP ZTS is disabled by default?
为什么ZTS
默认是禁用的,我们应该编译PHP源代码来实现Threading
能力?
当我们启用 ZTS
时是否有任何限制或副作用?不稳定吗?
PHP 最初作为 CGI 二进制文件开始,然后作为 Apache 的模块。这两种方式都不需要 PHP 成为线程 运行 时间,因为它们都会按顺序处理请求。
添加对其他 Web 服务器(尤其是通过其 ISAPI 接口的 Microsoft IIS)的支持时,它们的处理模型需要 PHP 才能 运行 作为线程进程。 PHP 添加了一个 "ZTS"(Zend 线程安全)模式,该模式做了一些工作以确保 运行 并行(线程化)的请求不会相互干扰。但这确实 以性能成本 为代价 。
由于大多数 Web 服务器 API 不需要启用 ZTS,因此 PHP 的默认设置是关闭的。如果您要为 ISAPI SAPI(服务器抽象)层构建 PHP,则 PHP 构建过程会自动打开 ZTS 模式。
话虽如此,ZTS 模式并不是允许 在 PHP 脚本中线程化,而是允许 PHP 本身 运行 在线程环境中。如果从 PHP 的脚本角度对 运行 并行处理感兴趣,则需要求助于第三方扩展,例如 Joe 的 parallel extension, or swoole.
为什么ZTS
默认是禁用的,我们应该编译PHP源代码来实现Threading
能力?
当我们启用 ZTS
时是否有任何限制或副作用?不稳定吗?
PHP 最初作为 CGI 二进制文件开始,然后作为 Apache 的模块。这两种方式都不需要 PHP 成为线程 运行 时间,因为它们都会按顺序处理请求。
添加对其他 Web 服务器(尤其是通过其 ISAPI 接口的 Microsoft IIS)的支持时,它们的处理模型需要 PHP 才能 运行 作为线程进程。 PHP 添加了一个 "ZTS"(Zend 线程安全)模式,该模式做了一些工作以确保 运行 并行(线程化)的请求不会相互干扰。但这确实 以性能成本 为代价 。
由于大多数 Web 服务器 API 不需要启用 ZTS,因此 PHP 的默认设置是关闭的。如果您要为 ISAPI SAPI(服务器抽象)层构建 PHP,则 PHP 构建过程会自动打开 ZTS 模式。
话虽如此,ZTS 模式并不是允许 在 PHP 脚本中线程化,而是允许 PHP 本身 运行 在线程环境中。如果从 PHP 的脚本角度对 运行 并行处理感兴趣,则需要求助于第三方扩展,例如 Joe 的 parallel extension, or swoole.