PHP-FPM與Swoole的比較
前幾天看見有幾篇講 swoole 的文章,今天我也來湊個熱鬧。程度有限,細節理解可能不到位,歡迎大家幫我補充、修正。
PHP-FPM
早期版本的 PHP 並沒有內建的 WEB 伺服器,而是提供了 SAPI(Server API)給第三方做對接。現在非常流行的 php-fpm 就是透過 FastCGI 協定來處理 PHP 與第三方 WEB 伺服器之間的通訊。例如 Nginx php-fpm 的組合,這種方式運行的 fpm 是 Master/Worker 模式,啟動一個 Master 程序監聽來自 Nginx 的請求,再 fork 多個 Worker 程序處理請求。每個 Worker 行程只能處理一個請求,單一行程的生命週期大致如下:
1.初始化模組。
2.初始化請求。此處請求是請求 PHP 執行程式碼的意思,並非 HTTP 的請求。
3.執行 PHP 腳本。
4.結束請求。
5.關閉模組。
多進程模型是依賴進程數來解決並發問題,一個進程只能處理一個連接,當啟動大量進程,進程調度消耗可能佔CPU 的百分之幾十甚至100%,例如C10K 問題,多進程模型就力不從心了。
Swoole
Swoole 採用的也是Master/Worker 模式,不同的是Master 行程有多個Reactor 線程,Master 只是一個事件產生器,負責監聽Socket 句柄的事件變化。 Worker 以多進程的方式執行,接收 Reactor 執行緒的請求,並執行回呼函數(PHP 編寫的)。啟動 Master 進程的流程大致是:
1.初始化模組。
2.初始化請求。因為 swoole 需要透過 cli 的方式運行,所以初始化請求時,不會初始化 PHP 的全域變量,如 $_SERVER, $_POST, $_GET 等。
3.執行 PHP 腳本。包括詞法、語法分析,變數、函數、類別的初始化等,Master 進入監聽狀態,並不會結束流程。
Swoole 加速的原理
● 由 Reactor(epoll 的 IO 復用方式)負責監聽 Socket 句柄的事件變化,解決高並發問題。
● 透過記憶體常駐的方式節省 PHP 程式碼初始化的時間,在使用笨重的框架時,用 swoole 加速效果是非常明顯的。
比較不同
PHP-FPM
● Master 主程式 / Worker 多行程模式。
● 啟動 Master,透過 FastCGI 協定監聽來自 Nginx 傳輸的請求。
● 每個 Worker 程序只對應一個連接,用於執行完整的 PHP 程式碼。
● PHP 程式碼執行完畢,佔用的記憶體會全部銷毀,下次要求則需要重新進行初始化等各種繁瑣的操作。
● 只用於 HTTP Server。
Swoole
● Master 主程式(由多個Reactor 執行緒組成)/ Worker 多重處理(或多執行緒)模式
● 啟動Master ,初始化PHP 程式碼,由Reactor 監聽Socket 句柄的事件變化。
● Reactor 主執行緒負責子多執行緒的均衡問題,Manager 進程管理 Worker 多重進程,包含 TaskWorker 的進程。
● 每個 Worker 接受 Reactor 的請求,只需要執行回呼函數部分的 PHP 程式碼。
● 只在 Master 啟動時執行一遍 PHP 初始化程式碼,Master 進入監聽狀態,並不會結束進程。
● 不僅可以用於 HTTP Server,還可以建立 TCP 連線、WebSocket 連線。
以上主要針對核心運行機製作對比,列舉的不同,暫時就想到這幾點了,如果有漏掉的重點,歡迎大家幫我補充啦~
以上是PHP-FPM與Swoole的比較的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

如何使用php-fpm進行高效能調優PHP是一種非常流行的伺服器端腳本語言,廣泛用於開發網頁應用程式和動態網站。然而,隨著訪問量的增加,PHP應用程式的效能可能會受到影響。為了解決這個問題,我們可以使用php-fpm(FastCGIProcessManager)來進行高效能調優。本文將介紹如何使用php-fpm來提升PHP應用程式的效能,並提供程式碼範例。一、

如何使用PHP-FPM優化來提高PrestaShop應用程式的效能隨著電子商務產業的快速發展,PrestaShop成為了許多商家選擇的電子商務平台。然而,隨著商店規模的擴大和訪問量的增加,PrestaShop應用程式可能會遇到效能瓶頸。為了提高PrestaShop應用的效能,常見的方法是使用PHP-FPM來最佳化和改善應用的處理能力。 PHP-FPM(FastCGI

如何使用PHP-FPM優化提高WooCommerce應用的效能概述WooCommerce是一個非常流行的電子商務插件,用於在WordPress網站上建立和管理線上商店。然而,隨著商店的成長和流量的增加,WooCommerce應用可能會變得緩慢且不穩定。為了解決這個問題,我們可以使用PHP-FPM來優化和提升WooCommerce應用的效能。什麼是PHP-FP

利用php-fpm連線池提升資料庫存取效能概述:在網路開發中,資料庫的存取是非常頻繁且耗時的操作之一。傳統的方法是每次資料庫操作都新建一個資料庫連接,使用完畢後再關閉連接。這種方式會造成資料庫連線的頻繁建立和關閉,增加了系統的開銷。為了解決這個問題,可以利用php-fpm連接池技術來提升資料庫存取效能。連接池的原理:連接池是一種快取技術,將一定數量的資料庫

PHP-FPM是一種常用的PHP流程管理器,用於提供更好的PHP效能和穩定性。然而,在高負載環境下,PHP-FPM的預設配置可能無法滿足需求,因此我們需要對其進行調優。本文將詳細介紹PHP-FPM的調優方法,並給予一些程式碼範例。一、增加進程數預設情況下,PHP-FPM只啟動少量的進程來處理請求。在高負載環境下,我們可以透過增加進程數來提高PHP-FPM的同時

如何利用PHP-FPM優化提升Phalcon應用的效能導語:Phalcon是一個高效能的PHP框架,結合PHP-FPM可以進一步提升應用的效能。本文將介紹如何利用PHP-FPM優化Phalcon應用的效能,並提供具體的程式碼範例。一、什麼是PHP-FPMPHP-FPM(PHPFastCGIProcessManager)是獨立於Web伺服器的PHP進程

ubuntu沒有php-fpm的解決方法:1、執行「sudo apt-get」指令來加入php的來源位址;2、檢視有沒有php7的套件;3、透過「sudo apt-get install」指令安裝PHP;4 、修改設定監聽9000埠來處理nginx的請求;5、透過「sudo service php7.2-fpm start」啟動「php7.2-fpm」即可。

什麼是php-fpm?以下這篇帶大家了解一下php-fpm,介紹一下優化 php-fpm 時我們到底要優化什麼,希望對大家有幫助!
