php安全執行緒

來源:互聯網
上載者:User
看到zend debuger有非安全執行緒的版本,才知道PHP推出了非安全執行緒的版本。而此前我對非安全執行緒一無所知:
另一篇文章好像說這個跟FASTCGI有點關係。
這是一段文字,不過我沒看明白:
php本身是安全執行緒的。一個服務進程可以安全地提供多請求線程的支援
一些擴充並不遵守
例如:安全執行緒的擴充中,全域變數的定義不是像普通C程式那樣直接定義在函數之外,而是定義在宏ZEND_BEGIN_MODULE_GLOBALS和 ZEND_END_MODULE_GLOBALS之間。需要ZTS(Zend Thread Safe)支援的擴充需要包含TSRM.h標頭檔,並定義TSRMG宏值
在不支援安全執行緒的擴充中,僅是簡單地認為一個服務進程同時只有一個請求在啟用狀態,不會出現衝突,那麼全域變數可以簡單地在RINIT函數中初始化(RINIT表示請求開始)並在RSHUTDOWN中登出:CODE:

PHP_RINIT_FUNCTION(ext)
{
   counter = 0;
}
PHP_FUNCTION(ext)
{
   RETURN_LONG(counter++);
}這就是一個很簡單的計數器。只要請求沒有結束,每次調用ext,都會觸發counter自增。
當在多線程環境中時,這個程式會發生嚴重的混亂,counter會變得飄忽不定,因為沒有辦法預測線程的觸發和結束順序及時間。這說明這個擴充並非線程級安全。

多線程,Apache 1.3 和 Apache 2.0

如 果您已經使用了 Apache 和 PHP 一段時間了,那麼您很可能見到過安裝文檔中的一個警告資訊,它說“不要在生產環境中使用 Apache 2.0.x 和 PHP,在 Unix 和 Windows 上都不行”。在 Windows 系統上的 PHP 5.0.2 包中,這個警告資訊可以在 install.txt 檔案中的第 745 行找到。我們需要理解此處的這個問題是什麼,這樣就可以決定是否要使用 Apache 2.0 或 IBM HTTP Server 2.0。

Apache 2.0 可以配置為以兩種方法運行:採用線程的和不採用線程的。當作為一個採用線程的伺服器運行時,伺服器中可以同時有多個線程都處於活動狀態在執行,一次可以為 多個使用者產生響應資訊。通常,這樣可以提高伺服器的響應能力,使其更好地利用具有多個處理器的大型硬體。但是它同時也引入了一種風險。伺服器調用的各個軟 件層次必須在同時為多個使用者調用時都能保證是安全的。儘管 Web 服務器本身、PHP 解譯器以及 PHP 擴充以這樣調用都是安全的,但是有些 PHP 擴充會使用其他語言(例如 C 語言)編寫的庫,這些庫並不全都是安全執行緒的。

在 Apache Web 頁面上您可以找到一個有關這個問題的討論,其中給出了一些建議,以及一種用來發現您的 PHP 擴充可能正在使用哪些 C 庫以及哪些是安全執行緒的方法,請參閱參考資料部分。

在 實踐中,很多人都會選擇迴避這個問題,而是採用下面的兩種方法:要麼以單線程模式使用 Apache 2.0,要麼使用 Apache 1.3,它總是以單線程模式運行。雖然 Apache 1.3 和 2.0 也有其他一些區別,例如 Apache 2.0 可以支援 IPv6,但是到目前為止,二者之間最大的區別就是線程的問題,因此保留使用 Apache 1.3 伺服器並不像聽起來一樣是一種退化。

這 個問題在 IBM HTTP Server 中是怎樣的呢?IBM 採用線程模式從 Apache 2.0 中編譯出了 IBM HTTP Server:這樣速度更快,但卻可能在使用非安全執行緒的擴充時是不安全的。由於 IBM 並沒有同時發行原始碼,而且選擇採用線程和不採用線程的模式都是在編譯時間進行選擇的,因此作為一個終端使用者來說,您無法選擇採用不使用線程的模式重新編譯 IBM HTTP Server 2.0。不過在編寫本文時,IBM 正在同時發行基於 2.0 和 1.3 版本的 IBM HTTP Server,這樣您就可以選擇使用單線程的基於 1.3 版本的伺服器了。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.