如何判断PHP 是线程安全仍是非线程安全的

什么是线程安全与非线程安全?

线程安全就是在多线程环境下也不会出现数据不一致,而非线程安全就有可能出现数据不一致的状况。php

线程安全因为要确保数据的一致性,因此对资源的读写进行了控制,换句话说增长了系统开销。因此在单线程环境中效率比非线程安全的效率要低些,可是若是线程间数据相关,须要保证读写顺序,用线程安全模式html

这个主要是针对web server 而言,在windows环境下,若是你使用的web server 是apchae 或者 iis 7如下版本,则应该选择线程安全的安装文件,而若是你使用Fast-cgi模式时,能够选择非线程安全,由于 web sever 自己能保证线程安全。
固然还有二进制文件编译时所使用的编译器:vc9 (vs系列) vc6(gcc)

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


先从字面意思上理解,None-Thread Safe就是非线程安全,在执行时不进行线程(thread)安全检查;Thread Safe就是线程安全,执行时会进行线程(thread)安全检查,以防止有新要求就启动新线程的 CGI 执行方式耗尽系统资源

再来看PHP的两种执行方式:ISAPI和FastCGI。FastCGI执行方式是以单一线程来执行操做,因此不须要进行线程的安全检查,除去线程安全检查的防御反而能够提升执行效率,因此,若是是以 FastCGI(不管搭配 IIS 6 或 IIS 7)执行 PHP ,都建议下载、执行 non-thread safe 的 PHP (PHP 的二進位檔有兩種包裝方式:msi 、zip ,請下載 zip 套件)。而线程安全检查正是为ISAPI方式的PHP准备的,由于有许多php模块都不是线程安全的,因此须要使用Thread Safe的PHP。

说到这里,你们应该知道应该如何选择哪一个版本的PHP了。None-Thread Safe or Thread Safe,您会选择哪一个?

Windows下的PHP如今的版本已是5.3.6,如今的Windows版本能够在PHP官方PHP For Windows(http://windows.php.net/download/)下载,下载的时候同版本有VC9 x86 Non Thread Safe、VC9 x86 Thread Safe、VC6 x86 Non Thread Safe、VC6 x86 Thread Safe等四个版本。那么这些版本有什么区别呢?

 VC9的版本是用legacy VS 2008编译的,VC6的版本是用legacy VS6编译的。

若是你是在windows下使用IIS+PHP的话,你须要下载VC9的版本。
若是你是在windows下使用Apache+PHP的话,你须要下载VC6的版本。

Non Thread Safe是指非线程安全,Thread Safe则是指线程安全。

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



如何判断:
经过phpinfo(); 查看其中的 Thread Safety 项,这个项目就是查看是不是线程安全,若是是:enabled,通常来讲应该是ts版,不然是nts版。
相关文章
相关标签/搜索