PHP线程安全与线程非安全

1、线程安全

线程安全就是能够在多线程环境下正常工作。这取决于web server在处理并行访问时是否用到多线程。

2、非线程安全

不论在什么平台、用什么web server,只要是用cgi/fastcgi方式运行PHP,都用非线性安全

linux必然配合非线程安全的PHP,IIS则要用线性安全的PHP。Apache有两种运行模式:如果用fastcgi模式,则配合非线性安全PHP,如果用LoadModule模式,则要用线性安全PHP。

a、windows + IIS + FastCGI :使用非线程安全版本。
解释:
以FastCGI方式安装PHP时,PHP拥有独立的进程,并且FastCGI是单一线程的,不存在多个线程之间可能引发的相互干扰(这种干扰通常都是由于全局变量和静态变量导致的)。由于省去了线程安全的检查,因此使用FastCGI方式比ISAPI方式的效率更高一些。

b、windows + IIS + ISAPI :使用线程安全版本。
解释:
PHP以ISAPI方式安装时,PHP没有独立的进程,而是作为DLL被IIS加载运行的,即是依附于Web服务器进程的。当Web服务器运行在多线程模式下(IIS正是这种情况),PHP自然也就运行在多线程模式下。只要是在多线程模式下运行,就可能存在线程安全问题,因此应选择PHP的线程安全版本。

c、windows + Apache + PHP(load_module) :使用线程安全版本。
解释:
如果你要在Apache中以模块方式安装PHP,则你应该使用PHP的线程安全的版本。原因是当PHP作为Apache的模块安装时,PHP没有独立的进程,而是作为模块以DLL的形式被加载到Apache中的,是随Apache的启动而启动的,而Windows下的Apache为多线程工作模式,因此PHP自然也就运行在多线程模式下。因此,这种情况下应使用PHP的线程安全版本。

d、windows + Apache + PHP(ISAPI) :使用线程安全版本。
解释:
由于以ISAPI方式来安装PHP时,PHP也没有独立的进程,也是作为模块被加载到Apache中的,因此,同样也需要使用PHP的线程安全版本。
一般不建议在Apache中以ISAPI方式来安装PHP,原因是到目前为止,Apache通过mod_PHP线程安全与线程非安全isapi.so模块来实现的ISAPI功能并不完整,并未完整实现微软对ISAPI所制定的全部规范。

e、windows + Apache + PHP(FastCGI) :使用非线程安全版本。
解释:
如果你要在Apache中以FastCGI方式使用PHP,则同在IIS中使用FastCGI的PHP的情况一样,你应该使用PHP的非线程安全的版本。原因是在Apache中以FastCGI方式安装PHP时,PHP拥有独立的进程,并且FastCGI是单一线程的,故应使用PHP的非线程安全版本以提高性能。 

上一篇:nginx探索(6)搭建nginx+php环境(centos7环境下)


下一篇:WEB服务与NGINX(21)- nginx 的fastcgi反向代理功能