首页  >  问答  >  正文

在线程安全和非线程安全 PHP 之间进行选择:如何做出正确的决定?

我正在 Windows 10 中开发 Laravel 9.x 应用程序。我当前的 PHP 版本是 PHP 8.1.5 (cli) (build: Apr 12 2022 17:38:57) (ZTS Visual C++ 2019 x64) 。这是线程安全版本还是非线程安全版本?我怎么知道?我什么时候应该选择线程安全版本而不是非线程安全版本?

我尝试在 StackOverflow 上研究这个问题,但我看到的问题/答案似乎都有十年或更久了 - 就像这样 - 我强烈怀疑如果我今天问这个问题,我可能会得到不同的答案仅仅是因为技术在这几年里发生了变化。这是一个合理的假设吗? (至少,我当前版本的 PHP 显然使用了更新的编译器 VC++ 2019,而不是 VC6 或 VC9。)

我还不知道我的生产环境会是什么样,甚至不知道我正在开发的应用程序是否会进入生产环境,因为它只是我正在编写的一个用于(重新)学习 Laravel 的应用程序。到时候我可能会把它投入生产,作为 Laravel 应用程序的演示,但它是否会在托管服务、Netlify 或其他东西上,我现在还不知道。

只是为了给您一些背景信息,这个问题只是因为我试图学习如何单步执行 Laravel 源代码来调试问题而出现,这显然需要我将 XDebug 添加到 XAMPP。我找到的安装 XDebug 的说明将我指向此处,并建议我下载适用于我的 PHP 版本的 Windows 二进制文件。没有 8.1.5 的二进制文件,所以我不知道 8.1 的二进制文件之一是否可以工作,或者我是否最好使用 8.1 线程安全或 8.1 非线程安全。如果我的PHP先升级到8.2会更好,我仍然不知道线程安全还是非线程安全是更好的选择。

有人可以告诉我这些问题吗?

P粉350036783P粉350036783324 天前583

全部回复(1)我来回复

  • P粉033429162

    P粉0334291622023-12-24 15:46:59

    这是线程安全版本还是非线程安全版本?我怎么知道?

    您可以使用旧的 phpinfo() 函数并查找Thread Safety 列。

    如果您在 PATH 环境中设置了 PHP,您甚至可以使用快速命令通过 CLI 获取它 php -i | grep 线程

    什么时候我应该选择线程安全版本而不是非线程安全版本?

    根据PHP官方文档

    我还不知道我的生产环境会是什么样......

    一般来说,TS 或 NTS 代码执行没有区别。它更多地面向网络服务器。

    如果我没记错的话,默认情况下,XAMPP 使用 Apache Handler,因此它可能是线程安全的构建。是的,PHP8.1 的 Xdebug 二进制文件可以正常工作。

    从技术上讲,NTS 应该稍微快一些,因为它不需要考虑线程安全。

    就我个人而言,我认为这并不重要,除非您想花更多的时间来修改网络服务器,切换到 FastCGI 或 PHP-FPM,因为您仍处于开发阶段,我认为坚持默认设置并专注于完成它会更有效率。

    回复
    0
  • 取消回复