php non-thread-safe與thread-safe

一、如何選擇PHP5.3的VC9版本和VC6版本
 
    VC6版本是使用Visual Studio 6編譯器編譯的,如果你的PHP是用Apache來架設的,那你就選擇VC6版本
 
    VC9版本是使用Visual Studio 2008編譯器編譯的,如果你的PHP是用IIS來架設的,那你就選擇VC9版本。
 
二、如何選擇PHP5.3的Thread Safe和Non Thread Safe版本
 
    先從字面意思上理解,Thread Safe是線程安全,執行時會進行線程(Thread)安全檢查,以防止有新要求就啓動新線程的CGI執行方式而耗盡系統資源。Non Thread Safe是非線程安全,在執行時不進行線程(Thread)安全檢查。
 
    再來看PHP的兩種執行方式:ISAPI和FastCGI。
 
    ISAPI執行方式是以DLL動態庫的形式使用,可以在被用戶請求後執行,在處理完一個用戶請求後不會馬上消失,所以需要進行線程安全檢查,這樣來提高程序的執行效率,所以如果是以ISAPI來執行PHP,建議選擇Thread Safe版本
 
    而FastCGI執行方式是以單一線程來執行操作,所以不需要進行線程的安全檢查,除去線程安全檢查的防護反而可以提高執行效率,所以,如果是以FastCGI來執行PHP,建議選擇Non Thread Safe版本。
******************************************************************************************************************************
打開該頁發現PHP 5.3有以下幾個版本可供選擇:
VC9 x86 Non Thread Safe
VC9 x86 Thread Safe
VC6 x86 Non Thread Safe
VC6 x86 Thread Safe
我裝的web server是Apache 2.2.11,一開始下載了php-5.3.0-nts-Win32-VC9-x86(VC9 x86 Non Thread Safe),安裝時的選項如下圖:
選擇第二項Other CGI後安裝完成,php不能在Apache中使用。
其中有一段說明了版本的選擇:
General note:
Download the VC6 builds if you are using the standard Apache.org web server. The VC9 builds should be used for the Apache Lounge binaries or IIS.
A Thread Safe version should be used if you install PHP as an Apache module. The Non Thread Safe version should be used if you install PHP as a CGI binary.
因爲我的Apache是標準(非Lounge)版本,所以應該下載PHP的VC6版本。因爲是想安裝成Apache Module,所以選擇Thread Safe版本。也就是:VC6 x86 Thread Safe。
下載php-5.3.0-Win32-VC6-x86後安裝,選項如下圖:
有了Apache 2.2.x Module的選項。
**********************************************************************************************************************************
一、FastCGI是什麼?
  FastCGI是語言無關的、可伸縮架構的CGI開放擴展,其主要行爲是將CGI解釋器進程保持在內存中並因此獲得較高的性能。衆所周知,CGI解釋器的反覆加載是CGI性能低下的主要原因,如果CGI解釋器保持在內存中並接受FastCGI進程管理器調度,則可以提供良好的性能、伸縮性、Fail-Over特性等等。
    FastCGI的官方站點在http://www.fastcgi.com
  FastCGI的工作原理是:
  1、Web Server 啓動時載入FastCGI進程管理器(IIS ISAPI或Apache Module);
  2、FastCGI進程管理器自身初始化,啓動多個CGI解釋器進程 (在任務管理器中可見多個php-cgi.exe)並等待來自Web Server的連接。
  3、當客戶端請求到達Web Server時,FastCGI進程管理器選擇並連接到一個CGI解釋器。Web server將CGI環境變量和標準輸入發送到FastCGI子進程php-cgi.exe。
  4、FastCGI子進程完成處理後將標準輸出和錯誤信息從同一連接返回Web Server。當FastCGI子進程關閉連接時,請求便告處理完成。FastCGI子進程接着等待並處理來自FastCGI進程管理器(運行在WebServer中)的下一個連接。 在正常的CGI模式中,php-cgi.exe在此便退出了。
  在上述情況中,你可以想象CGI通常有多慢。每一個Web請求PHP都必須重新解析php.ini、重新載入全部dll擴展並重初始化全部數據結構。使用FastCGI,所有這些都只在進程啓動時發生一次。一個額外的好處是,持續數據庫連接(Persistent database connection)可以工作。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章