php的ts,tns

  1. 簡介

ts(Thread-Safety)即線程安全,多線程訪問時,採用了加鎖機制,當一個線程訪問該類的某個數據時,進行保護,其他

線程不能進行訪問直到該線程讀取完,其他線程纔可使用。不會出現數據不一致或者數據污染phpISAPI方

加載的時候選擇這個版本.phpISAPI方加載的時候選擇這個版本.

      nts(None-Thread Safe)即非線程安全,就是不提供數據訪問保護,有可能出現多個線程先後更改數據造成所得到的髒數php以fast cgi方式運行的時候選擇這個版本,具有更好的性能;

ISAPI(Internet Server Application Programming Interface), 通常是指被http服務器所加載,以服務器的模塊形式運行,由微 軟提出,故只能在win平臺上運行,例如win下的apache,iis[據說用fast cgi 方式工作更穩定],而linux上php則以 Apache模塊或者php-fpm的方式運行。

cgi(Common Gateway Interface):HTTP服務器與你的或其它機器上的程序進行“交談”的一種工具,說白了,cig就是一種後臺語言,其可以和服務器之間進行通訊。此時的php是作爲一個獨立的程序運行的。特點就是耗費內存。

fast cgi.是一個常駐(long-live)型的CGI,它可以一直執行着,只要激活後,不會每次都要花費時間去fork.這種方式是與語言無關的、可伸縮架構的CGI開放擴展,其主要行爲是將CGI解釋器進程保持在內存中並因此獲得較高的性能。

cgi和fast cgi的區別找度娘。

2.選擇

 通常win下php和apache組合,以isapi的方式運行,而linux下可以是apche+php,php常常作爲apache的模塊,而nginx+php時,phpfast cgi的方式,即php-fpm的方式跑。

   據說php-fpm這種方式釋放了web服務器,使其僅僅處理請求和併發,而php處理則交php-fpm完成,故 nginx+php現在很受青睞


TS指Thread Safety,即線程安全,一般在IIS以ISAPI方式加載的時候選擇這個版本。
NTS即None-Thread Safe,一般以fast cgi方式運行的時候選擇這個版本,具有更好的性能。
具體:
從2000年10月20日發佈的第一個Windows版的PHP3.0.17開始的都是線程安全的版本,這是由於與Linux/Unix系統是採用多進程的工作方式不同的是Windows系統是採用多線程的工作方式。如果在IIS下以CGI方式運行PHP會非常慢,這是由於CGI模式是建立在多進程的基礎之上的,而非多線程。一般我們會把PHP配置成以ISAPI的方式來運行,ISAPI是多線程的方式,這樣就快多了。但存在一個問題,很多常用的PHP擴展是以Linux/Unix的多進程思想來開發的,這些擴展在ISAPI的方式運行時就會出錯搞垮IIS。因此在IIS下CGI模式纔是 PHP運行的最安全方式,但CGI模式對於每個HTTP請求都需要重新加載和卸載整個PHP環境,其消耗是巨大的。
爲了兼顧IIS下PHP的效率和安全,微軟給出了FastCGI的解決方案。FastCGI可以讓PHP的進程重複利用而不是每一個新的請求就重開一個進程。同時FastCGI也可以允許幾個進程同時執行。這樣既解決了CGI進程模式消耗太大的問題,又利用上了CGI進程模式不存在線程安全問題的優勢。
因此:
如果是使用ISAPI的方式來運行PHP就必須用Thread Safe(線程安全)的版本;
而用FastCGI模式運行PHP的話就沒有必要用線程安全檢查了,用None Thread Safe(NTS,非線程安全)的版本能夠更好的提高效率。

通過phpinfo();打印環境查看其中的 Thread Safety 項,這個項目就是查看是否是線程安全如果是:enabled,一般來說應該是ts版,否則是nts版。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章