php多進(jìn)程
php多進(jìn)程是在開發(fā)業(yè)務(wù)邏輯層面,并行處理多個任務(wù)的一種開發(fā)方式,例如,需要給10萬給會員發(fā)送郵件,每個郵件需要處理1秒,如果是一個進(jìn)程處理,就得10萬*1秒才能處理完,但是,如果開啟多個進(jìn)程同時處理,例如:10個進(jìn)程,那只需要10萬*1/10秒就能處理完成,縮短了10倍的時間
多進(jìn)程的概念
前面有講到,多進(jìn)程主要是在開發(fā)業(yè)務(wù)邏輯層面,并行處理多個任務(wù)的開發(fā)方式,什么叫做開發(fā)業(yè)務(wù)邏輯層面呢?
在上面我們有講到,php-fpm是fast-cgi的進(jìn)程管理器,啟動之后會啟動多個fast-cgi進(jìn)程,等待任務(wù)處理
在php-fpm軟件層面,fast-cgi的多個進(jìn)程就屬于多進(jìn)程處理,但是,當(dāng)用戶發(fā)起請求,由nginx交給php-fpm處理請求時,在這個層面,每個請求其實只占有一個php fast-cgi進(jìn)程進(jìn)行處理邏輯,對于運(yùn)行業(yè)務(wù)邏輯的這個php進(jìn)程,其實是單進(jìn)程的.
同理,當(dāng)我們直接運(yùn)行一個php文件時,默認(rèn)是只開啟了一個php進(jìn)程進(jìn)行運(yùn)行php的代碼
多進(jìn)程的開發(fā)場景
在傳統(tǒng)web模式下,php一向是單進(jìn)程處理業(yè)務(wù)邏輯,只有在php-cli模式下,用于處理異步任務(wù),作為網(wǎng)絡(luò)服務(wù)器時,才可能用到多進(jìn)程處理,所以,大部分phper都對php多進(jìn)程的概念不熟悉
偽多進(jìn)程
在上面講到,在傳統(tǒng)web下,一個請求就是一個進(jìn)程,我們可以通過這個方法,實現(xiàn)理論上的多進(jìn)程:
- 在一個php文件中,寫消費(fèi)任務(wù)邏輯,比如給隊列中的會員id發(fā)送郵件(注意超時,注意用戶端關(guān)閉不終止腳本)
- 用網(wǎng)頁訪問這個php文件,相當(dāng)于開啟了一個進(jìn)程處理
- 再開第二個網(wǎng)頁訪問這個文件,相當(dāng)于又開啟了一個進(jìn)程
- 如此重復(fù),我們可以得到n個處理郵件的進(jìn)程
- 針對于消費(fèi)任務(wù)邏輯層面,我們已經(jīng)是開啟了多進(jìn)程在處理了