适用于 Windows 的 PHP 线程安全和非线程安全

Posted

技术标签:

【中文标题】适用于 Windows 的 PHP 线程安全和非线程安全【英文标题】:PHP Thread Safe and Non-Thread Safe for Windows 【发布时间】:2011-11-04 12:11:14 【问题描述】:

我正在为 Windows 下载 php。我在网站上有 2 个选项。

    PHP 线程安全 PHP 非线程安全

请回答以下问题:

    两者有什么区别?什么是 各有优劣? 我正在开发一个流量很大的电子商务网站,哪个更推荐?为什么?

【问题讨论】:

What is thread safe or non thread safe in PHP 的可能重复项 你对“大流量”的理解是什么,你怎么能确定你会得到它? @Crack- 高流量意味着许多用户将在给定时间使用该网站。为什么我不能确定?!有什么问题吗? 只有“大流量”可以有多种定义,对于某些人来说是大流量,而对于某些人来说可能是中等甚至小流量。这里一个有用的指标是页面点击量/天/小时/分钟,任何类型的客观衡量标准。 【参考方案1】:

来自 PHP 文档:

线程安全意味着二进制文件可以在多线程网络服务器上下文中工作,例如 Windows 上的 Apache 2。线程安全通过在每个线程中创建一个本地存储副本来工作,这样数据就不会与另一个线程发生冲突。

那我该怎么选?如果您选择将 PHP 作为 CGI 二进制文件运行,则不需要线程安全,因为每次请求都会调用该二进制文件。对于多线程网络服务器,例如 IIS5 和 IIS6,您应该使用 PHP 的线程版本。

所以这真的取决于你想要使用 PHP 的方式:

Apache + LoadModule:线程安全 Apache + FastCGI:非线程安全 IIS:线程安全 IIS + FastCGI:非线程安全

PHP 手册有很好的installation instructions。

AFAIR 使用 FastCGI 运行 PHP 是更可取的方式,它执行速度更快,并且允许更细粒度的安全配置。

【讨论】:

This 页面告诉您:“如果您将 PHP 与 IIS 一起使用,您应该使用 PHP 的非线程安全 (NTS) 版本。”与答案相比:“IIS:线程安全” 是的,它提到了 FastCGI。线程安全适用于使用 ISAPI (php5isapi.dll) 为什么要使用非线程安全选项呢?这就像:如果我可以在购买安全车和非安全车之间进行选择,我为什么要选择非安全车?它表现得更好还是什么? @SimonEast NTS版本有一些开销管理线程,已经由webserver完成,所以性能会下降 @SimonEast 没错。这就像做两次工作,一次在 PHP 中,一次在 Web 服务器中【参考方案2】:

除了 Crack,从 5.4 开始你可以使用built-in web server(它很好用!)。

警告 此 Web 服务器旨在帮助应用程序开发。 它也可能对测试或应用有用 在受控环境中运行的演示。它不是 旨在成为功能齐全的Web服务器。它不应该用于 公共网络。

【讨论】:

您需要为您正在谈论的内容添加某种参考。什么内置网络服务器?这与 ThreadSafe 与 NotThreadSafe 有何关系? 我认为通过内置的 Web 服务器,他的意思是 PHP's built-in webserver (php -S ip:port)——虽然不知道与线程安全的关系。【参考方案3】:

快速简单:如果您使用 Apache,请编辑您的 Apache24\conf\httpd.conf 文件并搜索“loadmodule”。如果你看到你的 loadmodule 引用了一个类似的 .dll:

LoadModule php7_module "e:/x64Stack/PHP/php7.1.9/php7apache2_4.dll" AddHandler 应用程序/x-httpd-php .php PHPIniDir "e:/x64Stack/PHP/php7.1.9"

那么你想要启用线程安全TS - 线程安全版本

如果您使用 IIS 或 Apache 与 CGI,则为 NTS 风格。

我在多个服务器和 PHP 版本中使用多个堆栈,所以不要让路径 / php 或服务器版本抛出你。

【讨论】:

以上是关于适用于 Windows 的 PHP 线程安全和非线程安全的主要内容,如果未能解决你的问题,请参考以下文章

php 安装yaf扩展和yaf框架

Php cli是守护进程的吗

任何 C++11 线程安全保证是不是适用于使用 C++11 编译/链接的第三方线程库?

适用于 Linux 和 Windows 的多线程键盘检测器

线程安全和非线程安全

所谓线程安全和非线程安全