什么是線程安全與非線程安全?
線程安全就是在多線程環境下也不會出現數據不一致,而非線程安全就有可能出現數據不一致的情況。
線程安全由于要確保數據的一致性,所以對資源的讀寫進行了控制,換句話說增加了系統開銷。所以在單線程環境中效率比非線程安全的效率要低些,但是如果線程間數據相關,需要保證讀寫順序,用線程安全模式
這個主要是針對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版。