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