PHP 中什么线程安全(TS)和非线程安全(NTS)

| 选择喜欢的代码风格  

比如你要使用 pthreads 这个PHP多线程 PECL 扩展,那就要求PHP进行线程安全检查.

如果PHP作为模块嵌入到多线程程序运行,比如嵌入到多线程的 Linux Event MPM 或者 WINNT MPM 的 Apache(mod_php),或者 IIS (ISAPI模块,5.3.1开始已经废弃),也需要线程安全版本的 PHP.

如果是嵌入到多进程的 Linux Prefork MPM(Apache 2.2系列默认MPM)的 Apache,或者独立以 PHP-FPM(多进程应用)或PHP-CGI运行时,则不需要线程安全.

注意:因为要进行线程安全检查,所以非线程安全版本的 PHP 效率会更好.

Linux 上 configure 时,加上 --enable-maintainer-zts 参数即可编译线程安全版本的 PHP。 注意:有些 PECL 不支持线程安全,也就是说不能在线程安全版本下运行,所以你会看到 Xdebug 有线程安全和非线程安全的之分。

PHP ThreadSafe 和 Non Thread Safe 总结


PHP所推出的 Thread Safe 主要针对的是 Windows 下以 IIS 来运行 PHP 的情况,因为 Windows 中频繁申请进程开销较大,所以在 Windows 中要以多线程方式来运转 PHP,这时候就需要 Thread Safe 版本。而在 Linux 系统下,PHP 绝大多数情况下都以多进程方式运行,所以直接使用 None Thread Safe即可。

但需要注意虽然都是在 Windows IIS 中,如果以 FastCGI 方式的 IIS 部署运行,则需要选择 None Thread Safe (NTS)

PHP TS 和 NTS

TS指的是支持多线程的构建。 NTS指的是仅单线程构建。 TS二进制文件的用例涉及与作为模块加载到Web服务器中的多线程SAPI和PHP的交互。 对于NTS二进制文件,广泛的用例是通过FastCGI协议与Web服务器交互,不使用多线程(但也使用CLI)。

PHP For Windows 扩展阅读


VC11, VC14 & VC15


最近的 PHP 版本使用 VC11,VC14 或 VC15(分别是Visual Studio 2012,2015或2017编译器)构建,并包括性能和稳定性方面的改进。

  • - VC11版本需要安装 Visual Studio 2012 x86 或 x64 的Visual C ++ Redistributable
  • - VC14版本需要安装 Visual Studio 2015 x86 或 x64 的Visual C ++ Redistributable
  • - VC15版本需要安装 Visual Studio 2017 x64 或 x86 的Visual C ++ Redistributable

VC14, VC15 & VS16:


更新版本的PHP使用VC14,VC15或VS16(分别为Visual Studio 2015,2017或2019编译器)构建,并包括性能和稳定性方面的改进。

- VC14,VC15和VS16版本需要安装Visual C ++ Redistributable for Visual Studio 2015-2019 x64或x86

什么是 PGO?


Profile Guided Optimization 是 Microsoft 的 Visual C ++ 编译器中提供的一种优化功能,允许您根据在应用程序或模块的测试运行期间收集的分析数据来优化输出文件。

PGO 扩展阅读




发表评论