搜尋
首頁頭條【高級】workman 和swoole 有哪些差別和異同

workerman和swoole在現階段很紅,有時間得認識認識,不然你就不是混php圈的。 swoole是使用C語言實現的socket通訊框架,workerman則是使用純php實現的socket框架,二者進程模型上也存在著許多的不同。

先說下swoole的流程模型,看以下解析圖。

【高級】workman 和swoole 有哪些差別和異同

master進程
這個進程比較複雜,也是我認為最核心的進程,這是一個包含多執行緒的進程,分別是一個主線程和n個reactor線程(數量可以配置)。其中,主線程用於accept新的連接,然後評估一下每個reactor線程負責維護的連接數,然後分配給數量最少的那個reactor線程,最大程度保證每個reactor線程的負載量是均衡的。本質上講,一旦一個socket可讀或可寫了,就由reactor線程發送給worker進程或發送會客戶端。除此之外,主線程還負責對所有訊號的接管,避免reactor線程收到訊號的打擾中斷。說的洋氣點兒就是:master進程負責了連接的accept、託管、socket的可讀可寫(資料的發送和接受),本質上講,master進程負責了IO。還需要注意一點兒的是reactor線程是徹底的全非同步非阻塞工作方式。

manager進程
manager進程是worker進程和taskworker進程的媽,說的洋氣點兒就是manager進程fork出來了worker進程和taskworker進程,生出來了就得管,所以,manager進程得負責對worker進程和taskworker進程的撫養義務,具體包括監控它們的狀態、當它們意外掛了後重新拉起一個新的進程(避免了殭屍進程)、平滑重啟(就是傳說中的reload)。

worker進程
worker進程是manager進程fork出來的,這個進程說白了就是搬磚工作(官方文件中屢次提到的業務代碼),其實就是平時碼的那些curd業務邏輯代碼,懂了吧?只不過worker進程比較diao的是,這個行程可以用非同步方式去運作,也可以用同步方式去工作。如果聽不懂什麼意思,那就先背過,先混個臉熟再說。

taskworker進程
taskworker進程(後文稱為tasker進程)實際上本質上也是worker進程,只不過是一種特殊的worker進程。如果你的worker進程中存在一些耗時耗力的操作,那麼可以先拋給tasker進程,自己先去幹別的,等tasker乾完了,再由worker進程取回,非常diao。但是tasker進程只能工作在同步方式下,並不能使用非同步。這就是為什麼tasker進程不可以使用定時器,而worker進程可以使用定時器的原因。

簡單總結混在一起說下這幾種進程之間是怎麼搭配起來工作的。簡單來說,就是master進程就是接活兒的銷售,但是具體幹活則由worker進程來做,如果worker進程感覺到某些流程太繁忙複雜就可以讓tasker進程來做。而manager進程就是後勤worker進程和takser進程的人力資源保障部,負責他們的生死存亡和吃喝拉撒。

而workerman的進程模型相對就要簡單很多了,首先相對於swoole來說,workerman沒有swoole中的reator線程,其次workerman沒有用於處理普通業務的worker進程以及tasker進程。而workerman的話,socket是由worker進程負責的,swoole中則是由主進程中的reactor線程來負責的。而swoole在接受到資料後,可以透過自己的worker進程來處理業務(有點類似fpm進程)。

workerman是一個高效能的PHP socket 伺服器框架,workerman基於PHP多進程以及libevent事件輪詢庫,PHP開發者只要實作一兩個接口,便可以開發出自己的網路應用,例如Rpc服務、聊天室伺服器、手機遊戲伺服器等。

workerman的目標是讓PHP開發者更容易的開發出基於socket的高效能的應用服務,而不用去了解PHP socket以及PHP多進程細節。 workerman本身就是一個PHP多進程伺服器框架,具有PHP進程管理以及socket通訊的模組,所以不依賴php-fpm、nginx或apache等這些容器便可以獨立運行

其中

# workerman有兩種行程模型

1、基本的master worker模型

2、master gateway worker模型

master worker模型工作流程及行程間關係如下:

【高級】workman 和swoole 有哪些差別和異同

master worker模型說明:

#master進程為主進程,啟動過程中讀取conf配置,根據每個應用程式配置中的ip和連接埠建立監聽socket,然後再根據配置中的進程數建立對應數量的子進程即worker進程,worker進程會自動繼承master進程創建的監聽socket,使得worker進程能夠獨立的接受並處理客戶端的連線。而後master進程進入監聽訊號的邏輯中,監聽worker進程退出訊號(worker進程退出後,系統會自動向master程式發送一個SIGHCLD訊號,mater進程會重新建立子進程,將缺少的子程式補上),master進程也會監聽workermand腳本發送的停止訊號(SIGINT)和平滑重啟服務訊號(SIGHUP)

worker進程為master進程派生出來的子進程,自動繼承了master進程的監聽socket,每個worker進程獨立的接受並處理客戶端的連線。

master worker模型比較適合業務簡單的應用或短連線應用

master gateway worker模型工作流程與行程間關係如下:

【高級】workman 和swoole 有哪些差別和異同

master gateway worker 模型說明:

這種模型多了一個gateway進程組,工作流程與master worker模型基本上相同,差異在於worker進程不再直接與客戶端打交道,客戶端與worker進程之間多了一個gateway進程,gateway專職處理網路IO,並維護客戶端的長連線。

master gateway worker 模型非常適合長連結應用

當我們業務程式碼以同步阻塞方式來使用swoole和workerman的時候,swoole則很想nginx fpm的二合一體,而workerman則只相當於nginx

陳述
本文轉載於:csdn。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
4 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具