php - 为什么默认禁用 PHP ZTS?

标签 php multithreading zts

为什么ZTS默认禁用,我们应该编译PHP源来实现Threading能力?
当我们启用 ZTS 时是否有任何限制或副作用? ?不稳定吗?

最佳答案

PHP 最初是作为 CGI 二进制文件开始的,然后作为 Apache 的模块。这两种方式都不需要 PHP 成为线程运行时,因为它们都会按顺序处理请求。

当添加对其他 Web 服务器的支持时,尤其是通过其 ISAPI 接口(interface)支持的 Microsoft IIS,它们的处理模型要求 PHP 能够作为线程进程运行。 PHP 添加了一个“ZTS”(Zend 线程安全)模式,该模式做了相当多的工作以确保并行(线程)运行的请求不会相互影响。但这确实来了以性能为代价 .

由于大多数 Web 服务器 API 不需要启用 ZTS,因此 PHP 的默认设置是关闭。如果您要为 ISAPI SAPI(服务器抽象)层构建 PHP,那么 PHP 构建过程会自动打开 ZTS 模式。

说了这么多,ZTS 模式并不是要允许 PHP 脚本中的线程,而是允许 PHP 本身在线程环境中运行。如果您对从 PHP 脚本的角度并行运行事物感兴趣,则需要求助于第三方扩展,例如 Joe 的 parallel。扩展名,或 swoole .

关于php - 为什么默认禁用 PHP ZTS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58918146/

相关文章:

php - docker-compose up -d不会创建卷,而docker-compose up会创建卷

php - curl 的大小或长度限制是多少?

java - spring boot - 映射对请求的正确响应,用于多异步调用

c++ - 是否有一些方法可以使 c++ 类中的一个函数在不同的线程中运行

java - 安卓应用

php - 在 PHP 7.3.4 中调用获取资源间歇性返回 nullptr

php - 查找 json 数组中的对象数

php - Laravel orderby 查询与不同