[TOC]
# php 多進程
******
php 多進程是在開發業務邏輯層面,并行處理多個任務的一種開發方式,例如,需要給10萬個會員發送郵件,每個郵件需要處理1秒,如果是一個進程處理,就得10萬\*1秒才能處理完,但是,如果開啟多個進程同時處理,例如:10個進程,那只需要10萬\*1/10秒就能處理完成,縮短了10倍的時間。
<br />
## 多進程的概念
前面有講到,多進程主要是在開發業務邏輯層面,并行處理多個任務的開發方式,什么叫做開發業務邏輯層面呢?
在上面我們講到,php-fpm 是 fast-cgi 進程進行處理邏輯,對于運行業務邏輯的這個 php 進程,其實是單進程的。
在 php-fpm 軟件層面,fast-cgi 的多個進程就屬于多進程處理,但是,當用戶發起請求,由 nginx 交給 php-fpm 處理請求時,在這個層面,每個請求其實只占有一個 php fast-cgi 進程進行處理邏輯,對于運行業務邏輯的這個 php 進程,其實是單進程的。
同理,當我們直接運行一個 php 文件時,默認是只開啟一個 php 進程進行運行 php 的代碼。
<br />
## 多進程的開發場景
在傳統 web 模式下,php 一向是單進程處理業務邏輯,只有在 php-cli 模式下,用于處理異步任務,作為網絡服務器時,才能用到多線程處理,所以,大部分 phper 都對 php 多進程的概念不熟悉。
<br />
## 偽多進程
在上面講到,在傳統 web 下,一個請求就是一個進程,我們可以通過這個方法,實現理論上的多進程:
* 在一個 php 文件中,寫消費任務邏輯,比如給隊列中的會員 id 發送郵件(注意超時,注意用戶端關閉不終止腳本)
* 用網頁訪問這個 php 文件,相當于開啟了一個進程處理
* 再開第二個網頁訪問這個文件,相當于又開啟了一個進程
* 如此重復,我們可以得到n 個處理郵件的進程
* 針對于消費任務邏輯層面,我們已經是開啟了多進程在處理了。
- 引言
- Introduction
- 運行模式
- php-fpm
- php-cli
- 基礎介紹
- 網絡協議
- ip
- tcp
- tcp
- http
- webSocket
- udp
- port端口
- 會話管理
- cookie
- session
- api/token
- linux基礎
- lnmp安裝
- 命令
- 進程管理
- 擴展安裝
- 端口監控
- 防火墻說明
- php7.0
- 部分新特性
- php回調/閉包
- 回調事件
- 閉包/匿名函數
- php多進程
- 多進程開啟
- 進程通信
- 進程信號
- 僵尸進程
- 孤兒進程
- 守護進程
- 同步/異步
- 阻塞/非阻塞
- 協程
- Swoole
- 初始Swoole
- 運行機制
- 生命周期
- composer使用
- EasySwoole
- 設計理念
- 組件說明
- 運行過程
- demo
- 提問的藝術