PHP在預設的情況下是不支援多線程的,透過安裝pthreads擴展,讓其參數來指定編譯PHP的線程安全方式來使其支援多線程,但是使用的過程中要考慮到線程安全的問題。
執行緒是作業系統中進行運算調度的最小單位。它被包含在進程中,是進程中的實際運作單位。今天將要分享的是線程知識是有關於PHP的,具有一定的參考價值,希望對大家有所幫助
【推薦課程: PHP教學】
多執行緒的理解
所謂多執行緒就是在一個進程中可以並發多個線程,每個線程並行執行不同的任務。多執行緒大大提高了程式的執行效率,一個多執行緒比單執行緒被作業系統調度的機率更大。而且更有效率。多個執行緒可以在多核心CPU的多個核心同時運行,並加快了運行效率。而且線程間的通訊更加簡單。
PHP多線程
在預設情況下PHP是不支援多執行緒的,要使用多執行緒需要安裝擴展,目前常用的擴展有pcnlt,POSIX , pthreads,但是用的最多的還是pthreads擴展,它透過使用參數來指定來編譯PHP時的執行緒安全方式,使其支援多執行緒。
在使用執行緒之前首先要考慮到執行緒的安全性問題,執行緒安全指的是某個函數或函數庫在多執行緒環境中被呼叫時,能夠正確的處理多執行緒之間的共享變量,使得程式的功能能夠正確完成
例:
在多執行緒中由於存在共享變量,很有可能會導致以下問題:
存在一个全局数组:$arr = array('a'); A 线程获取数组长度为1; B 线程获取数组长度为1; A 线程pop出数组元素 $a = array_pop($arr); $a = 'a'; B 线程也pop数组元素 $b = array_pop($arr); $a = null; 但是此时B线程内就出现了错误事件,虽设置了数组长度大于0,但是没有 pop值来
PHP實作執行緒安全性
PHP實作執行緒安全性主要透過TSRM 機制,透過此機制可以對全域變數和靜態變數進行隔離,並且給每個執行緒複製了一份全域變數和靜態變數。各個執行緒使用的都是主執行緒的一個備份。這樣就避免了變數衝突,也不會發生線程安全的問題。
PHP 對多執行緒的封裝保證了執行緒安全,所以開發人員就不需要在考慮讀寫衝突的問題了,也使得程式碼更加安全。不過這樣做也有不好的地方,例如當子執行緒開始運作時,主執行緒便再也無法對子執行緒運行細節進行調整了,失去了訊息傳遞能力
#總結:以上就是這篇文章的全部內容了,希望對大家有幫助。
以上是php多線程是什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!