php是單執行緒還是多執行緒

2022-10-09 11:03:08 字數 566 閱讀 8947

php 從設計之初到流行起來都沒有出現明顯需要用多執行緒才能解決的需求。

多執行緒並不總是比單執行緒優,多執行緒可能會引入其他問題(例如:兩個執行緒同時呼叫乙個類裡的同乙個方法時,可能出現死鎖的情況)。

你可以這樣理解對應乙個客戶的乙個頁面請求處理的php 是單執行緒處理的, 這樣一來就可以自上而下的去編輯/理解**中的業務邏輯了, 但是 php 可以同時開很多執行緒來處理 很多使用者請求的同乙個php , 所以 php 也可以看成是"多執行緒"的。

每個php檔案的執行是單執行緒的,但是,伺服器(apache/nigix/php-fpm)是多執行緒的。每次對某個php檔案的訪問伺服器都會建立乙個新的程序/執行緒,用來執行對應的php檔案。

也就是說對於乙個請求來說php是單執行緒的,但是多個請求間是併發的。

其實一般寫php程式認為是單執行緒的就可以了;多個請求之間相互的關係就是,有些時候讀寫資料庫,檔案,session等會加鎖,會導致後面的請求掛起等待前面的請求執行完才繼續。

至於協程,只能說是一種新的程式執行流程(舊的是順序,判斷,迴圈),本質是也是單執行緒的

所以準確的說php是單執行緒的,一定程度上也可以看成是「多執行緒」!!!

Redis是多執行緒還是單執行緒?

沒錯,大家所熟知的 redis 確實是單執行緒模型,指的是執行 redis 命令的核心模組是單執行緒的,而不是整個 redis 例項就乙個執行緒,redis 其他模組還有各自模組的執行緒的。下面這個解釋比較好 一般來說 redis 的瓶頸並不在 cpu,而在記憶體和網路。如果要使用 cpu 多核,可...

Redis是單執行緒還是多執行緒

準確一點來講,既不是單執行緒,也不是多執行緒。io執行緒 記憶體處理執行緒 服務端和客戶端建立 socket 連線,並分配處理執行緒 首先,主線程負責接收建立連線請求。當有客戶端請求和例項建立 socket 連線時,主線程會建立和客戶端的連線,並把 socket 放入全域性等待佇列中。緊接著,主線程...

js 是單執行緒還是多執行緒

1 js 是單執行緒還是多執行緒?單執行緒,單位時間內只能處理乙個程序,所以會有執行緒阻塞問題 使用 函式解決 或者非同步同步問題 2 let 和 var 宣告變數的區別?1 作用域bai不一樣,var是函式作用域,而let是塊作用域,也就是說,在函式內宣告了var,整個函式內都是有效的,比如說在f...