溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

workerman和swoole有哪些區(qū)別

發(fā)布時間:2022-02-10 14:28:23 來源:億速云 閱讀:225 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關(guān)workerman和swoole有哪些區(qū)別的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

區(qū)別:1、swoole是使用C語言實現(xiàn)的socket通信框架,而workerman是使用純php實現(xiàn)的socket框架;2、workerman中socket是由worker進程負責(zé)的,swoole則是由主進程中的reactor線程來負責(zé)的。

本教程操作環(huán)境:Windows10系統(tǒng)、Swoole4版、DELL G3電腦

workerman和swoole有哪些區(qū)別

workerman和swoole在現(xiàn)階段很受爭議,有時間你得認識認識,不然你就不是混php圈子的。swoole是使用C語言實現(xiàn)的socket通信框架,workerman則是使用純php實現(xiàn)的socket框架,二者進程模型上也存在很多的不同。

master進程

這個進程比較復(fù)雜,也是我認為最核心的進程,這是一個包含多線程的進程,分別是一個主線程和n個reactor線程(數(shù)量可以配置)。

其中,主線程用于accept新的連接,然后評估一下每個reactor線程負責(zé)維護的連接數(shù),然后分配給數(shù)量最少的那個reactor線程,最大程度保證每個reactor線程的負載量是均衡的。

本質(zhì)上講,一旦一個socket可讀或者可寫了,就由reactor線程發(fā)送給worker進程或者發(fā)送會客戶端。除此之外,主線程還負責(zé)對所有信號的接管,避免reactor線程收到信號的打擾中斷。

說的洋氣點兒就是:master進程負責(zé)了連接的accept、托管、socket的可讀可寫(數(shù)據(jù)的發(fā)送和接受),本質(zhì)上講,master進程負責(zé)了IO。還需要注意一點兒的是reactor線程是徹底的全異步非阻塞工作方式。

manager進程

manager進程是worker進程和taskworker進程的媽,說的洋氣點兒就是manager進程fork出來了worker進程和taskworker進程,生出來了就得管,所以,manager進程得負責(zé)對worker進程和taskworker進程的撫養(yǎng)義務(wù),具體包括監(jiān)控它們的狀態(tài)、當(dāng)它們意外掛了后重新拉起一個新的進程(避免了僵尸進程)、平滑重啟(就是傳說中的reload)。

worker進程

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

taskworker進程

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

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

workerman

而workerman的進程模型相對就要簡單很多了,首先相對于swoole來說,workerman沒有swoole中的reator線程,其次workerman沒有用于處理普通業(yè)務(wù)的worker進程以及tasker進程。而workerman的話,socket是由worker進程負責(zé)的,swoole中則是由主進程中的reactor線程來負責(zé)的。而swoole在接受到數(shù)據(jù)后,可以通過自己的worker進程來處理業(yè)務(wù)(有點兒類似于fpm進程)。

workerman是一個高性能的PHP socket 服務(wù)器框架,workerman基于PHP多進程以及l(fā)ibevent事件輪詢庫,PHP開發(fā)者只要實現(xiàn)一兩個接口,便可以開發(fā)出自己的網(wǎng)絡(luò)應(yīng)用,例如Rpc服務(wù)、聊天室服務(wù)器、手機游戲服務(wù)器等。

workerman的目標(biāo)是讓PHP開發(fā)者更容易的開發(fā)出基于socket的高性能的應(yīng)用服務(wù),而不用去了解PHP socket以及PHP多進程細節(jié)。 workerman本身是一個PHP多進程服務(wù)器框架,具有PHP進程管理以及socket通信的模塊,所以不依賴php-fpm、nginx或者apache等這些容器便可以獨立運行

感謝各位的閱讀!關(guān)于“workerman和swoole有哪些區(qū)別”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI