發(fā)布日期:2019/11/1 8:29:14 訪(fǎng)問(wèn)次數:5582
在PHP 開(kāi)發(fā)和生產(chǎn)環(huán)境搭建過(guò)程中,需要安裝PHP語(yǔ)言解析器。官方提供了2種類(lèi)型的版本,線(xiàn)程安全(TS)版和非線(xiàn)程安全(NTS)版,有時(shí)后我們開(kāi)發(fā)環(huán)境和實(shí)際生產(chǎn)的環(huán)境有所不同,因此也需要選擇安裝對應的PHP版本。
1、簡(jiǎn)介
TS:
TS(Thread-Safety)即線(xiàn)程安全,多線(xiàn)程訪(fǎng)問(wèn)時(shí),采用了加鎖機制,當一個(gè)線(xiàn)程訪(fǎng)問(wèn)該類(lèi)的某個(gè)數據時(shí)進(jìn)行數據加鎖保護,其他線(xiàn)程不能同時(shí)進(jìn)行訪(fǎng)問(wèn)該數據,直到該線(xiàn)程讀取完畢,其他線(xiàn)程才可訪(fǎng)問(wèn)使用該數據,好處是不會(huì )出現數據不一致或者數據污染的情況,但耗費的時(shí)間要比 NTS 長(cháng)。
PHP以 ISAPI 方式(Apache 常用方式)加載的時(shí)候選擇TS版本。
NTS:
NTS(None-Thread Safe)即非線(xiàn)程安全,不提供數據訪(fǎng)問(wèn)保護,有可能出現多個(gè)線(xiàn)程先后或同時(shí)操作同一數據的情況,容易造成數據錯亂(即臟數據),一般操作的執行時(shí)間要比 TS 短。
PHP以FAST-CGI方式加載運行的時(shí)候選擇NTS版,具有更好的性能;
ISAPI:
ISAPI(Internet Server Application Programming Interface), 通常是指被http服務(wù)器所加載,以服務(wù)器的模塊形式運行,由微 軟提出,故只能在win平臺上運行,如win下的apache,iis[用fast cgi 方式工作更穩定],而linux上php 則以 Apache模塊(常用方式)或者php-fpm(該方式更適合于NGINX+PHP 運行)的方式運行。
CGI:
cgi(Common Gateway Interface):HTTP服務(wù)器與客戶(hù)端機器上的程序進(jìn)行“交談”的一種工具,簡(jiǎn)而言之,cig就是一種 后臺語(yǔ)言,可以與服務(wù)器進(jìn)行通訊。此時(shí)的php是作為一個(gè)獨立的程序運行的,特點(diǎn)就是耗費內存。
FAST CGI:
fast cgi是一個(gè)常駐(long-live)型的CGI,它可以一直執行著(zhù),只要激活后,不會(huì )每次都要花費時(shí)間去fork一個(gè)新進(jìn)程。這種方式 是與語(yǔ)言無(wú)關(guān)的、可伸縮架構的CGI開(kāi)放擴展,其主要行為是將CGI解釋器進(jìn)程保持在內存中并因此獲得較 高的性能。
FAST-CGI 是微軟為了解決 CGI 解釋器的不足而提出改進(jìn)方案。當一個(gè)請求向 web server 發(fā)送請求時(shí),web server總會(huì )fork一個(gè)CGI解釋器進(jìn)程進(jìn)行處理這個(gè)請求,進(jìn)程處理完成之后將結果返回給web server,web server將結果返回并顯示出來(lái),進(jìn)程結束,當用戶(hù)再次請求同一個(gè)頁(yè)面時(shí),web server又會(huì )fork一個(gè)新進(jìn)程進(jìn)行請求處理,這樣效率會(huì )比較低下(CGI被人詬病的主要原因)。而采用FAST-CGI 解釋器的 話(huà),當一個(gè)請求執行完畢后不會(huì )注銷(xiāo)該進(jìn)程,而是將改進(jìn)程進(jìn)入休眠期,當接收到新的請求時(shí),重新啟用改進(jìn)程進(jìn)行處理。FAST-CGI 較CGI 減少了進(jìn)程的重復創(chuàng )建的資源占用。
進(jìn)程與線(xiàn)程:一個(gè)進(jìn)程至少存在一個(gè)或多個(gè)線(xiàn)程。
2、選擇
通常win下 PHP + Apache 組合,以 ISAPI 的方式運行。
而linux下通常分為2種:
Apache + PHP,PHP一般作為Apache 的模塊進(jìn)行運行;
Nginx + PHP ,以 phpfast cgi的方式,即php-fpm的方式運行,該方式對高并發(fā)、高負載有良好的性能體現,因此很多網(wǎng)站采用該方式進(jìn)行環(huán)境的搭建。
Nginx 較Apache 的配置要少很多,因此人為出錯的概率要少一點(diǎn),但也因此 Apache 的 穩定性要比Nginx 高。
前面廢話(huà)了那么多,下面才是重點(diǎn) ...
總結:
以 ISAPI 方式運行就用 TS 線(xiàn)程安全版
以 FAST-CGI 或 PHP-FPM 方式運行就用NTS 非線(xiàn)程安全版
通常 Windows 下 Apache + PHP 選TS ,IIS(fast-cgi) + PHP 選NTS
通常Linux 下 Apache + PHP 選TS,Nginx + PHP 選NTS