PHP線程安全和非線程安全


1、線程安全

線程安全就是能夠在多線程環境下正常工作。這取決於web server在處理並行訪問時是否用到多線程。

2、非線程安全

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

linux必然配合非線程安全的PHP,IIS則要用線性安全的PHP。Apache有兩種運行模式:如果用fastcgi模式,則配合非線性安全PHP,如果用LoadModule模式,則要用線性安全PHP

3、區別


1、windows + IIS + FastCGI :使用非線程安全版本。
解釋:
以FastCGI方式安裝PHP時,PHP擁有獨立的進程,並且FastCGI是單一線程的,不存在多個線程之間可能引發的相互干擾(這種干擾通常都是由於全局變量和靜態變量導致的)。由於省去了線程安全的檢查,因此使用FastCGI方式比ISAPI方式的效率更高一些。

2、windows + IIS + ISAPI :使用線程安全版本。
解釋:
PHP以ISAPI方式安裝時,PHP沒有獨立的進程,而是作為DLL被IIS加載運行的,即是依附於Web服務器進程的。當Web服務器運行在多線程模式下(IIS正是這種情況),PHP自然也就運行在多線程模式下。只要是在多線程模式下運行,就可能存在線程安全問題,因此應選擇PHP的線程安全版本。

3、windows + Apache + PHP(模塊) :使用線程安全版本。
解釋:
如果你要在Apache中以模塊方式安裝PHP,則你應該使用PHP的線程安全的版本。原因是當PHP作為Apache的模塊安裝時,PHP沒有獨立的進程,而是作為模塊以DLL的形式被加載到Apache中的,是隨Apache的啟動而啟動的,而Windows下的Apache為多線程工作模式,因此PHP自然也就運行在多線程模式下。因此,這種情況下應使用PHP的線程安全版本。

4、windows + Apache + PHP(ISAPI) :使用線程安全版本。
解釋:
由於以ISAPI方式來安裝PHP時,PHP也沒有獨立的進程,也是作為模塊被加載到Apache中的,因此,同樣也需要使用PHP的線程安全版本。
一般不建議在Apache中以ISAPI方式來安裝PHP,原因是到目前為止,Apache通過mod_ isapi.so模塊來實現的ISAPI功能並不完整,並未完整實現微軟對ISAPI所制定的全部規范。

5、windows + Apache + PHP(FastCGI) :使用非線程安全版本。
解釋:
如果你要在Apache中以FastCGI方式使用PHP,則同在IIS中使用FastCGI的PHP的情況一樣,你應該使用PHP的非線程安全的版本。原因是在Apache中以FastCGI方式安裝PHP時,PHP擁有獨立的進程,並且FastCGI是單一線程的,故應使用PHP的非線程安全版本以提高性能。 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM