如何判断PHP是线程安全还是⾮线程安全的
什么是线程安全与⾮线程安全?
线程安全就是在多线程环境下也不会出现数据不⼀致,⽽⾮线程安全就有可能出现数据不⼀致的情况。
线程安全由于要确保数据的⼀致性,所以对资源的读写进⾏了控制,换句话说增加了系统开销。所以在单线程环境中效率⽐⾮线程安全的效率要低些,但是如果线程间数据相关,需要保证读写顺序,⽤线程安全模式
这个主要是针对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(windows.php/download/)下载,下载的时候同版本有VC9 x86 Non Thread Safe
、VC9 x86 Thread Safe、VC6 x86 Non Thread Safe、VC6 x86 Thread Safe等四个版本。那么这些版本有什么区别呢?php支持多线程吗
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 版。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。