PHP的執行緒安全與非執行緒安全版本的區別
Windows版的PHP從版本5.2.1開始有Thread Safe(執行緒安全)和None Thread Safe(NTS,非執行緒安全)之分,這兩者不同在於何處?到底應該用哪種?這裡做一個簡單的介紹。
從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,非執行緒安全)的版本能夠更好的提高效率。
相關文件:PHP版本詳解
相關文章
- Windows下的PHP開發環境搭建——PHP執行緒安全與非執行緒安全、Apache版本選擇,及詳解五種執行模式。WindowsPHP開發環境執行緒Apache模式
- Java執行緒(一):執行緒安全與不安全Java執行緒
- 【多執行緒總結(二)-執行緒安全與執行緒同步】執行緒
- 【Java多執行緒】執行緒安全的集合Java執行緒
- 作業系統——執行緒與程式的區別與聯絡?什麼是執行緒安全?作業系統執行緒
- 執行緒3--執行緒安全執行緒
- 執行緒安全和執行緒不安全理解執行緒
- 執行緒安全執行緒
- pymysql 非執行緒安全導致的故障.MySql執行緒
- 多執行緒系列之 執行緒安全執行緒
- iOS 多執行緒之執行緒安全iOS執行緒
- iOS多執行緒之執行緒安全iOS執行緒
- 多執行緒與高併發(二)執行緒安全執行緒
- 併發與多執行緒之執行緒安全篇執行緒
- 程式與執行緒的區別執行緒
- swift值型別的執行緒安全Swift型別執行緒
- 多執行緒-以前的執行緒安全的類回顧執行緒
- Java 執行緒安全 與 鎖Java執行緒
- 什麼是執行緒安全和執行緒不安全執行緒
- Java併發實戰一:執行緒與執行緒安全Java執行緒
- Java多執行緒中執行緒安全與鎖問題Java執行緒
- 執行緒安全(二)執行緒
- Java執行緒安全Java執行緒
- Java - 執行緒安全Java執行緒
- 畫江湖之 PHP 多執行緒開發 【執行緒安全 互斥鎖】PHP執行緒
- 畫江湖之 PHP 多執行緒開發 [執行緒安全 互斥鎖]PHP執行緒
- 程式與執行緒區別執行緒
- STL容器的執行緒安全?執行緒
- 執行緒安全的GenericDictionary執行緒
- 什麼時候執行緒不安全?怎樣做到執行緒安全?怎麼擴充套件執行緒安全的類?執行緒套件
- Java 多執行緒基礎(四)執行緒安全Java執行緒
- iOS多執行緒安全-13種執行緒鎖?iOS執行緒
- C#.Net前臺執行緒與後臺執行緒的區別C#執行緒
- 多執行緒,你覺得你安全了?(執行緒安全問題)執行緒
- 程式設計思想之多執行緒與多程式(2):執行緒優先順序與執行緒安全程式設計執行緒
- 執行緒安全性執行緒
- 多執行緒安全(一)執行緒
- 執行緒安全操作HashMap執行緒HashMap