什麼是線程安全與非線程安全?
線程安全就是在多線程環境下也不會出現數據不一致,而非線程安全就有可能出現數據不一致的狀況。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版。