Windows版PHP的线程安全与非线程安全版本详解及选择指南
最近做了一个php的小东西,在网上发现了这篇文章。网上也有转载,但找不到原文链接。如果您知道什么,请告诉我,我会将其附加到博客中。谢谢。

从5.2.1版本开始,Windows版本的PHP分为Thread Safe(线程安全)和None Thread Safe(NTS,非线程安全)。两者有什么区别?应该使用哪一个?这里简单介绍一下。
从2000年10月20日发布的PHP 3.0.17第一个Windows版本开始,所有版本都是线程安全的。这是因为与Linux/Unix系统采用多进程工作方式不同,Windows系统采用多进程工作方式。线程如何工作。如果在IIS下以CGI方式运行PHP,速度会很慢。这是因为CGI模式是基于多进程的,而不是多线程的。
一般情况下,我们将PHP配置为以ISAPI模式运行。 ISAPI是多线程模式,速度快很多。但有一个问题。很多常用的PHP扩展都是基于Linux/Unix的多进程思想开发的。当这些扩展在 ISAPI 模式下运行时,它们会出错并导致 IIS 崩溃。因此,CGI模式是IIS下运行PHP最安全的方式,但CGI模式需要为每个HTTP请求重新加载和卸载整个PHP环境,其消耗巨大。
为了兼顾IIS下PHP的效率和安全性,微软提供了FastCGI解决方案。 FastCGI可以使PHP进程重新启动
重用而不是为每个新请求重新启动进程。同时,FastCGI还可以允许多个进程同时执行。这解决了问题
它解决了CGI进程模式消耗过多的问题,并且利用了CGI进程模式不存在线程安全问题的特点。
因此,如果使用ISAPI来运行PHP,则必须使用Thread Safe(线程安全)版本;并使用
如果以FastCGI模式运行PHP,则无需使用线程安全检查。使用None Thread Safe(NTS,非线程安全)。
版本可以更好的提高效率。
PHP for windows 有四个正式版本:VC9 x86 Non Thread Safe、VC9 x86 Thread Safe、VC6 x86 Non Thread Safe、VC6 x86 Thread Safe;那么有什么区别呢?
1.支持的服务器不同
VC9版本是针对IIS服务器的,不支持APACHE,而VC6版本则提供了对IIS和apache的支持。
什么是VC6?
VC6是遗留的Visual Studio 6编译器,使用此编译器进行编译。
什么是VC9?
VC9是Visual Studio 2008编译器,使用微软的VS编辑器编译。
那么我们如何选择下载哪个版本的PHP呢?
如果您在windows下使用Apache+PHP,请选择VC6版本;
如果您在Windows下使用IIS+PHP,请选择VC9版本;
2、操作方法的差异
PHP有2种运行模式:ISAPI和FastCGI。
ISAPI执行方式以DLL动态库的形式使用,用户请求后即可执行。它不会在处理完用户请求后立即消失,因此需要进行线程安全检查,以提高程序的执行效率,所以如果是使用ISAPI执行PHP时,建议选择Thread Safe版本;
FastCGI执行方式使用单线程执行操作,因此不需要进行线程安全检查。去掉线程安全检查的保护可以提高执行效率。因此,如果使用FastCGI执行PHP,建议选择Non Thread Safe版本。
对于apache服务器,一般选择isapi方式,而对于nginx服务器,则选择FastCGI方式。