Windows的PHP线程安全和非线程安全


88

我正在下载Windows的PHP。我在网站上有2个选择。

  1. PHP线程安全
  2. PHP非线程安全

请回答以下问题:

  1. 两者有什么区别?彼此之间的优缺点是什么?
  2. 我正在开发一个电子商务网站,该网站的流量很大,更推荐哪个网站,为什么?


1
您对“交通拥堵”有何了解,又如何确定会得到呢?
破解

@裂缝-高流量意味着许多用户将在给定时间使用该网站。我为什么不能确定呢?出问题了吗?
SUMIT

只能以多种方式定义“交通繁忙”,对于某些人来说,交通繁忙对于某些人来说可能是中等甚至轻度的交通。此处的一个有用指标是页面点击量/天/小时/分钟,是任何一种客观指标。
破解

Answers:


92

从PHP文档:

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

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

因此,这实际上取决于您要使用PHP的方式:

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

PHP手册具有很好的安装说明

AFAIR与FastCGI一起运行PHP是更可取的方法,它执行速度更快,并且允许进行更细粒度的安全性配置。


11
页面告诉您:“如果将PHP与IIS一起使用,则应使用PHP的非线程安全(NTS)版本。” 相较于答案告诉:“ IIS:线程安全”
umutm

9
是的,它提到了FastCGI。使用ISAPI(php5isapi.dll)时使用线程安全
破解

3
为什么要为非线程安全选项而烦恼呢?就像:如果我可以在购买安全车和非安全车之间做出选择,为什么我会选择非安全车?它执行得更好吗?
西蒙·伊斯特

4
@SimonEast NTS版本具有一些开销管理线程,这些线程已经由Web服务器完成,因此性能将降低
ReZa

3
确实是@SimonEast。就像做两次工作一样,一次是在PHP中,一次是在Web服务器中
ReZa

2

快速简便:如果您使用的是Apache,请编辑Apache24 \ conf \ httpd.conf文件并搜索“ loadmodule”。如果看到您的loadmodule引用了.dll,则如下所示:

LoadModule php7_module“ e:/x64Stack/PHP/php7.1.9/php7apache2_4.dll”
AddHandler application / x-httpd-php .php
PHPIniDir“ e:/x64Stack/PHP/php7.1.9”

然后,您要启用线程安全TS - Thread Safe版本

否则,如果您将IIS或Apache与CGI一起使用,则使用NTS风格。

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


0

除了Crack,从5.4开始,您可以使用内置的Web服务器(效果很好!)。


12
您需要为您所谈论的内容添加某种参考。什么内置的Web服务器?这与ThreadSafe与NotThreadSafe有何关系?
Despertar 2014年

1
我认为,对于内置Web服务器,他是指PHP的内置Web服务器php -S ip:port)–尽管不知道与线程安全的关系。
David Refoua
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.