Windows下的PHP安装文件线程安全和非线程安全的区别

从2000年10月20日发布的第一个Windows版的PHP3.0.17开始的都是线程安全的版本,这是由于与Linux/Unix系统是采用 多进程的工作方式不同的是Windows系统是采用多线程的工作方式。如果在IIS下以CGI方式运行PHP会非常慢,这是由于CGI模式是建立在多进程 的基础之上的,而非多线程。一般我们会把PHP配置成以ISAPI的方式来运行,ISAPI是多线程的方式,这样就快多了。但存在一个问题,很多常用的 PHP扩展是以Linux/Unix的多进程思想来开发的,这些扩展在ISAPI的方式运行时就会出错搞垮IIS。而用线程安全版本的话顶多只是搞跨某个 线程,而不会影响到整个IIS的安全。

当然在IIS下CGI模式才是
PHP运行的最安全方式,但CGI模式对于每个HTTP请求都需要重新加载和卸载整个PHP环境,其消耗是巨大的。为了兼顾IIS下PHP的效率和安全,

有人给出了FastCGI的解决方案。FastCGI可以让PHP的进程重复利用而不是每一个新的请求就重开一个进程。同时FastCGI也可以允许几个
进程同时执行。这样既解决了CGI进程模式消耗太大的问题,又利用上了CGI进程模式不存在线程安全问题的优势。

因此,如果是使用ISAPI的方式来运行PHP就必须用Thread Safe(线程安全)的版本;而用FastCGI模式运行PHP的话就没有必要用线程安全检查了,用None Thread Safe(NTS,非线程安全)的版本能够更好的提高效率。

下载PHP安装文件时,我看到有两种不同的二进制文件,非线程安全(Non Thread Safe)和线程安全(Thread Safe),php下载页面所列:http://windows.php.net/download/。这个是什么意思,之间有什么区别?

这个主要是针对web server 而言,在windows环境下,如果你使用的web server 是apchae 或者 iis
7以下版本,则应该选择线程安全的安装文件,而如果你使用Fast-cgi模式时,可以选择非线程安全,因为 web sever 本身能保证线程安全。

部分web server在处理应用请求的时候是用多线程而非多进程的方式处理,线程方式因为涉及到共享寄存器和内存,所以很容易出错,这个时候程序就需要花一些额外的经历去处理寄存器中的数据一致性,即保证线程安全。
所以是否采用线程安全主要看你的web server所采用的PHP请求处理方式,如果是多线程处理,那么请选择线程安全的,否则选择非线程安全的,那么Fast-cgi方式可选择非线程安全的。

时间: 2024-10-13 23:26:14

Windows下的PHP安装文件线程安全和非线程安全的区别的相关文章

转:Windows下的PHP开发环境搭建——PHP线程安全与非线程安全、Apache版本选择,及详解五种运行模式。

原文来自于:http://www.ituring.com.cn/article/128439 Windows下的PHP开发环境搭建——PHP线程安全与非线程安全.Apache版本选择,及详解五种运行模式. 今天为在Windows下建立PHP开发环境,在考虑下载何种PHP版本时,遭遇一些让我困惑的情况,为了解决这些困惑,不出意料地牵扯出更多让我困惑的问题. 为了将这些困惑一网打尽,我花了一下午加一晚上的时间查阅了大量资料,并做了一番实验后,终于把这些困惑全都搞得清清楚楚了. 说实话,之所以花了这么

windows下Emacs的安装与配置

windows下Emacs的安装与配置 1.下载到这个网址可以下载到Emacs的windows版本:http://ftp.gnu.org/pub/gnu/emacs/windows/只需要一个压缩文档,如emacs-23.2-bin-i386.zip 2.安装在D盘根目录下新建一个文件夹,取名Emacs23.2(也可以是其他路径,随个人喜好而定),将emacs-23.2-bin- i386.zip里的文件解压到这个目录下,这样在d:\Emacs23.2\下就有bin, tec, info, le

windows下的mysql安装

windows下的mysql安装分为采用安装文件安装(用的是windows的install程序来做安装),还有一种方式是通过windows中注册一个服务(也可以不注册服务,你每次在windows系统的dos窗口下通过mysqld,mysqldadmin等来做启动和关闭.所以注册了服务相当于把这些exe的程序和路径封装到服务中了,此外服务也可以方便的定义为开机就启动).总之就是两种安装方式. 如果第一次安装建议在MYSQL官网上下载包含INSTALL的方式来做安装,这样就相当于傻瓜式的操作,一般不

Windows下 VM12虚拟机安装OS X 10.11 和VM TOOLS

Windows下虚拟机安装Mac OS X —– VMware Workstation12安装Mac OS X 10.11 本文即将介绍WIN虚拟MAC的教程.完整详细教程(包含安装中的一些问题) [并且适用其他mac os x版本] Windows下 VM12虚拟机安装OS X 10.11(详细教程) (图挂了的话,请点击此处.本人在百度发的) 工具/原料 Mac OS X 10.11 镜像文件(链接:http://pan.baidu.com/s/1pL8HE59 密码:cq4d) unloc

[转载]为 Windows 下的 PHP 安装 PEAR 和 PHPUnit

为 Windows 下的 PHP 安装 PEAR 和 PHPUnit 粗略翻译自 Installing PEAR and PHPUnit on WAMP and Windows 7,略有增改. 有需要安装 PHPUnit 来测试脚本,搜索到一篇文章,记录下来. 注意:PHP 5.2 的目录下貌似是有 PEAR 目录的,也有 go-pear.bat,这个你可以自行研究下,看是否可用.我这里测试的是 PHP 5.4,默认不自带 go-pear.bat,所以,如果你是 5.2 的话,这个教程是否可用我

Windows下使用pip安装python包是报错-UnicodeDecodeError: 'ascii' codec can't decode byte 0xcb in position 0

先交待下开发环境: 操作系统:Windows 7 Python版本:2.7.9 Pip版本:6.1.1 其他环境忽略 在windows下使用pip下载python包,出现如下错误 [plain] view plain copy Collecting xxxxxx Exception: Traceback (most recent call last): File "D:\Python27\lib\site-packages\pip-6.0.8-py2.7.egg\pip\basecommand.

Windows下codeblocks的安装与配置

最近自己正好要使用codeblocks编写C++程序,安装好却发现无法编译,如果您也遇到相似问题,可以参考本文. 如果您已安装codeblocks,想转换成中文界面,直接参考Step 2. 如果您C程序无法编译,直接参考Step 3. Step 1.安装codeblocks [1]下载 codeblocks10.05setup [2]打开安装程序,点next直至安装完成(Win7请以管理员身份运行) Step 2.转换成中文界面 [1]下载 locale.zip [2]解压出 locale文件夹

Windows下的Memcache安装

很多phper不知道如何在Windows下搭建Memcache的开发调试环境,最近个人也在研究Memcache,记录下自己安装搭建的过程. 其实我开始研究Memcache的时候并不知道居然还有memcached for Win32这个鸟东西,害得我在CnetOS下折腾1天才搞定,今天突然发现Windows下的Memcache进行开发调试完全没有问题,所以写篇Memcache的文档分享给大家.Windows下的Memcache安装:1. 下载memcache的windows稳定版,解压放某个盘下面

Windows下的Memcache安装:

Windows下的Memcache安装:1. 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached2. 在终端(也即cmd命令界面)下输入 'c:\memcached\memcached.exe -d install' 安装3. 再输入: 'c:\memcached\memcached.exe -d start' 启动.NOTE: 以后memcached将作为windows的一个服务每次开机时自动启动.这样服务器端已经安装完毕了.4.下载php_memca