首頁  >  文章  >  後端開發  >  php行程和執行緒的區別

php行程和執行緒的區別

(*-*)浩
(*-*)浩原創
2019-09-25 10:22:283534瀏覽

php行程和執行緒的區別

進程:進程狹義的說就是正在運行的程式的實例,廣義的說進程是一個具有一定獨立功能的程式關於某個資料集合的一次運行活動。 (推薦學習:PHP程式設計從入門到精通

它是作業系統動態執行的基本單元,在傳統的作業系統中,行程既是基本的分配單元,也是基本的執行單元。 (幾個字概括:活動的、實體、執行的程式);

執行緒: #被稱為輕量級進程,是程式執行流的最小單位,執行緒是進程中的一個實體,是被系統獨立調度和分派的基本單位。

線程本身基本上不擁有系統資源,只擁有一點在運行中必不可少的資源(如程序計數器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源(幾個字概括:輕量級的、實體、進程之中、最小單位);

區別:

##0)進程是cpu資源分配的最小單位,執行緒是cpu調度的最小單位

1) 簡而言之,一個程式至少有一個行程,一個行程至少有一個執行緒.

2)執行緒的劃分尺度小於進程,使得多執行緒程式的並發性高。

3) 另外,進程在執行過程中擁有獨立的記憶體單元,而多個執行緒共享內存,從而大大提高了程式的運作效率。

4) 執行緒在執行過程中與進程還是有區別的。每個獨立的執行緒都有一個程式運行的入口、順序執行序列和程式的出口。但是執行緒不能夠獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制。

5) 從邏輯角度來看,多執行緒的意義在於一個應用程式中,有多個執行部分可以同時執行。但作業系統並沒有將多個執行緒看做多個獨立的應用,來實現進程的調度和管理以及資源分配。這就是進程和執行緒的重要區別。

PHP的各種並發模型

既然有兩個模型,那麼PHP使用的是哪一個呢?

答案是都支持,也就是說PHP支持多執行緒的模型, 在多執行緒情況下通常要解決資源共享和隔離的問題。 PHP本身是線程安全的。具體來說是那種模型需要看使用的是哪個SAPI,比如說在Apache中,那麼就可能使用多執行緒模型, 也可能使用多進程模型。而php-fpm使用的就是多進程模型。

目前比較推薦的方式是使用php-fpm的模型,因為這個模型對PHP來說有諸多的優點:

1.記憶體釋放簡單,使用多進程模型時進程可以容易透過退出的方式來釋放內存, 由於PHP有非常多的擴展,稍有不慎就可能導致內存洩露,fpm通過進程退出方式簡單除暴的解決了問題。


2.容災能力強,同樣的問題,擴充或php可能會出現段錯誤,如果是單進程多執行緒模型, 那麼整個PHP就掛掉了。這會影響服務,多進程的話, 某個進程死掉了也不會影響整體的服務。

多行程有多行程的優勢,多執行緒也有多執行緒的優勢,例如HHVM它選擇的是多執行緒模型。多執行緒模型最大的好處是資訊共享和通訊方便,因為在同一個進程空間內,可以直接使用指標。


例如opcode cache工具,在PHP裡,apc以及opcache等等使用的是共享內存來共享opcode, 那麼在HHVM中則不需要走共享內存,共享內存還有個問題是儲存複雜的資料結構不方便, 因為指標的問題,多執行緒情況下C/C 中的資料結構是可以共享的。這對效率提升也是有幫助的。

多進程和多執行緒還有一個明顯的模型差異:在處理請求時的邏輯。

在多進程情況下,由於跨進程是不好傳遞fd連線的。那麼多行程通常採用在父行程中listen(), 然後各個子程序accept()的方式來實現負載平衡。這樣的模型下可能會有驚群的問題。

而多執行緒模型下,可以採用一個獨立執行緒接受請求然後派發到各個worker執行緒的方式。

以上是php行程和執行緒的區別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn