php執行緒安全的實現

2021-10-06 01:22:12 字數 586 閱讀 4773

當php執行在如上類似的多執行緒伺服器時,此時的php處在多執行緒的生命週期中。在一定的時間內,乙個程序空間中會存在多個執行緒,同一程序中的多個執行緒公用模組初始化後的全域性變數,如果和php在cli模式下一樣執行指令碼,則多個執行緒會試圖讀寫一些儲存在程序記憶體空間的公共資源(如在多個執行緒公用的模組初始化後的函式外會存在較多的全域性變數),

此時這些執行緒訪問的記憶體位址空間相同,當乙個執行緒修改時,會影響其它執行緒,這種共享會提高一些操作的速度,但是多個執行緒間就產生了較大的耦合,並且當多個執行緒併發時,就會產生常見的資料一致性問題或資源競爭等併發常見問題,比如多次執行結果和單執行緒執行的結果不一樣。如果每個執行緒中對全域性變數、靜態變數只有讀操作,而無寫操作,則這些個全域性變數就是執行緒安全的,只是這種情況不太現實。

為解決執行緒的併發問題,php引入了tsrm: 執行緒安全資源管理器(thread safe resource manager)

php解決併發的思路非常簡單,既然存在資源競爭,那麼直接規避掉此問題,將多個資源直接複製多份,多個執行緒競爭的全域性變數在程序空間中各自都有乙份,各做各的,完全隔離。以標準的陣列擴充套件為例,首先會宣告當前擴充套件的全域性變數,然後在模組初始化時會呼叫全域性變數初始化巨集初始化array的,比如分配記憶體空間操作。

PHP執行緒安全與非執行緒安全的區別

原文 windows版的php從版本5.2.1開始有thread safe 執行緒安全 和none thread safe nts,非執行緒安全 之分,這兩者不同在於何處?到底應該用哪種?這裡做乙個簡單的介紹。因此,如果是使用isapi的方式來執行php就必須用thread safe 執行緒安全 的...

PHP執行緒安全和非執行緒安全的區別

windows版的php從版本5.2.1開始有thread safe。這兩者不同在於何處?到底應該用哪種?這裡做乙個簡單的介紹。從2000年10月20日發布的第乙個windows版的php3.0.17開始的都是執行緒安全的版本,這是由於與linux unix系統是採用 多程序的工作方式不同的是win...

PHP執行緒安全和非執行緒安全的區別

windows版的php從版本5.2.1開始有thread safe。這兩者不同在於何處?到底應該用哪種?這裡做乙個簡單的介紹。從2000年10月20日發布的第乙個windows版的php3.0.17開始的都是執行緒安全的版本,這是由於與linux unix系統是採用 多程序的工作方式不同的是win...