Swoole 程式模型分析
在這邊文章中我們將介紹以下內容:
1、Swoole Server 的執行模式
2、Swoole 程式模型分析
上圖是 Swoole 官網提供的各個程式相互關係圖,可以說理解了這張圖,你就理解了 Swoole 的程式模型。
1、 Swoole Server 的執行模式
常見的執行模式有 單執行緒模式和 程式模式兩種,兩種方式介紹如下:
單執行緒模式 (SWOOLE_BASE) 這種模式就是傳統的非同步非阻塞 Server,與 Nginx 和 Node.js 等非同步服務的原理是一樣的。在這種模式下,事件迴圈會直接回撥 PHP 的函式,而不是透過執行緒 dispatch 投遞任務。如果在回撥函式中有阻塞操作,就會導致 Server 退化為同步模式。 就像在上一篇文章中 Nginx+PHP-FPM 架構中介紹的那樣,Nginx 只做轉發,具體業務由 PHP-FPM 來實現。假如 Nginx 也可以處理業務邏輯,一旦出現阻塞的業務邏輯,Nginx 的效能會急劇下降。正是因為 Nginx 和 PHP-FPM 所起到的作用不同,才會造就 Nginx 的高效能。 Base 模式的特點:沒有 Master 程式的角色;每個 Worker 程式同時承擔了 Process 模式下 Reactor 執行緒和 Worker 程式兩部分職責;在這種模式下,Manage 程式是可選的,當設定了 worker_num=1,並且麼有使用 Task 和 MaxRequest 特性時,底層將直接建立一個單獨的 Worker 程式,不建立 Manager 程式 Base 模式的優點:沒有 IPC 開銷,效能更好;程式碼簡單,不容易出錯。 Base 模式的缺點:TCP 連線時在 Worker 程式中維持的,所以當某個 Worker 程式掛掉時,此 Worker 內的所有連線都將被關閉;少量 TCP 長連線無法利用到所有的 Worker 程式;TCP 連線與 Worker 程式是繫結的,在長連線應用中,不同的 Worker 程式無法實現負載均衡。例如:某些連線的資料量很大,這些連線所在的 Worker 程式的負載會非常高。但是某些連線資料量很小,所在 Worker 程式的負載會非常低。 Base 模式適用場景:如果客戶端連線之間不需要互動,可以使用 Base 模式。如 Memcache、Http 服務等。
程式模式 (SWOOLE_PROCESS) 多程式模式比較底層實現比較複雜,用了大量程式間通訊、程式管理機制。適合業務邏輯非常複雜的場景。Swoole 提供了完善的程式管理、記憶體保護機制。在業務邏輯非常複雜的情況下,也可以長期穩定執行。
2、 Swoole 程式模型
從上圖中可以看出,Swoole 在啟動後會建立 Master 程式和 Manager 程式。Master 程式會建立 Master 執行緒、Reactor 執行緒、心跳檢測執行緒等,Manager 程式會建立 Worker 程式和 Task 程式。
Swoole 的執行緒和程式之間分別有什麼作用呢?
Master 程式 這個程式是 swoole 的核心程式,也是一個多執行緒的程式,一個 Master 執行緒和多個 Reactor 程式,Reactor 執行緒的數量可以配置。
Master 執行緒 Master 執行緒用於 accept 新的連線,然後會評估每個 Reactor 執行緒維護的連線數,最後將這個新的連線分配給連線數量最少的那個 Reactor 執行緒,從而保證每個 Reactor 執行緒的負載量是均衡的。 Master 執行緒還負責對所有訊號的接管(包括請求處理、重啟程式、過載配置等),避免 Reactor 執行緒收到訊號的打擾中斷。
Reactor 執行緒 當一個 socket 可讀或可寫的時候,就由 Reactor 執行緒將事件轉發給 worker 程式。
Manager 程式 Manager 程式管理著 Worker 程式和 Task 程式,Worker 程式和 Task 程式是由 Manager 程式 fork 出來的。Manager 程式會監管 Worker 程式和 Task 程式的狀態,當他們意外掛掉時,Manager 程式會重新拉起新的程式,Manager 程式還負責 Worker 程式和 Task 程式的平滑重啟。
Worker 程式 Worker 程式是由 Manager 程式 fork 而來,用於處理具體的業務邏輯。Worker 程式可以用同步的方式去幹活,也可以用非同步的方式去幹活。
Task 程式 Task 程式是一種特殊的 Worker 程式,專門用於處理一些比較耗時的操作。Task 程式只能工作在同步的方式下,不能使用非同步。所以 Task 程式中不能使用定時器,而 Worker 程式可以。
以上就是本文的全部內容,如有錯誤,請指正!可以相互關注,方便一起交流技術心得。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70021881/viewspace-2915688/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- swoole記憶體管理分析記憶體
- Swoole 原始碼分析——Async 非同步事件系統 Swoole_Event原始碼非同步事件
- PHP下用Swoole實現Actor併發模型PHP模型
- 通過 Swoole\Table 實現 Swoole 多程式資料共享
- Swoole 原始碼分析——Client模組之Recv原始碼client
- Swoole 原始碼分析——Client模組之Send原始碼client
- Swoole 程式設計須知程式設計
- LNMP架構下的程式模型分析LNMP架構模型
- Swoole 原始碼分析——Client模組之Connect原始碼client
- Swoole 原始碼分析——Server模組之OpenSSL (上)原始碼Server
- Swoole 原始碼分析——Server 模組之 OpenSSL (上)原始碼Server
- Swoole 原始碼分析——Server 模組之 OpenSSL (下)原始碼Server
- Swoole 原始碼分析——Reactor 模組之 ReactorEpoll原始碼React
- Swoole 原始碼分析——鎖與訊號量模組原始碼
- Swoole 原始碼分析——基礎模組之 Pipe 管道原始碼
- Swoole 系列基礎之一(多程式)
- 大話 swoole 非同步程式設計非同步程式設計
- 另一個Swoole偵錯程式 - Yasd
- Swoole PHP高效能程式設計PHP程式設計
- [玩具程式碼]swoole多程式匯出大量資料
- swoole4.6.x 連線池底層原理深度分析
- 使用 swoole 實現程式的守護(三)
- 使用 SWOOLE 實現程式的守護(一)
- 使用 SWOOLE 實現程式的守護(二)
- Laravel 5.6 中優雅的管理 swoole 程式Laravel
- php swoolePHP
- Swoole 教程
- 基於 swoole 的連線池模型和非同步任務小框架模型非同步框架
- 倒立擺模型分析模型
- Swoole 中通過 process 模組實現多程式
- 層次分析法模型原理以及程式碼實現模型
- 使用者行為分析模型實踐(四)—— 留存分析模型模型
- Swoole 原始碼分析——Server模組之ReactorThread事件迴圈(下)原始碼ServerReactthread事件
- Swoole 原始碼分析——記憶體模組之記憶體池原始碼記憶體
- 使用者行為分析模型實踐(一)—— 路徑分析模型模型
- Laravel-swooleLaravel
- swoole 學習
- swoole 版本更新