PHP線程安全和非線程安全有什麼區別

咱們先來看一段PHP官網的原話:apache

Which version do I choose?

 

IIS

If you are using PHP as FastCGI with IIS you should use the Non-Thread Safe (NTS) versions of PHP.安全

Apache

Please use the Apache builds provided by Apache Lounge. They provide VC9, VC11 and VC14 builds of Apache for x86 and x64. We use their binaries to build the Apache SAPIs.多線程

If you are using PHP as module with Apache builds from apache.org (not recommended) you need to use the older VC6 versions of PHP compiled with the legacy Visual Studio 6 compiler. Do NOT use VC9+ versions of PHP with the apache.org binaries.ide

With Apache you have to use the Thread Safe (TS) versions of PHP.ui

上面一段話翻譯過來就是:spa

我選擇哪一個版本?線程

IIS
若是你使用的是PHP的FastCGI IIS,你應該使用非線程安全(NTS)版本的PHP。翻譯

Apache
請使用Apache Lounge提供的Apache構建。 他們提供了針對x86和x64的Apache的VC9,VC11和VC14版本。 咱們使用他們的二進制文件構建Apache SAPI。進程

若是你使用PHP做爲apache.org(不推薦)的Apache模塊,你須要使用舊的Visual Studio 6編譯的VC6版本的PHP。 不要使用apache.org二進制文件的VC9 +版本的PHP。開發

使用Apache,您必須使用Thread Safe(TS)版本的PHP。

 

咱們來解釋下上面的內容:

從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,非線程安全)的版本可以更好的提升效率。

相關文章
相關標籤/搜索