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