這篇文章給大家分享的是有關(guān)workerman和swoole有哪些區(qū)別的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
創(chuàng)新互聯(lián)主要業(yè)務(wù)有網(wǎng)站營銷策劃、網(wǎng)站建設(shè)、網(wǎng)站設(shè)計、微信公眾號開發(fā)、小程序開發(fā)、HTML5、程序開發(fā)等業(yè)務(wù)。一次合作終身朋友,是我們奉行的宗旨;我們不僅僅把客戶當(dāng)客戶,還把客戶視為我們的合作伙伴,在開展業(yè)務(wù)的過程中,公司還積累了豐富的行業(yè)經(jīng)驗、營銷型網(wǎng)站建設(shè)資源和合作伙伴關(guān)系資源,并逐漸建立起規(guī)范的客戶服務(wù)和保障體系。
區(qū)別:1、swoole是使用C語言實現(xiàn)的socket通信框架,而workerman是使用純php實現(xiàn)的socket框架;2、workerman中socket是由worker進(jìn)程負(fù)責(zé)的,swoole則是由主進(jìn)程中的reactor線程來負(fù)責(zé)的。
本教程操作環(huán)境:Windows10系統(tǒng)、Swoole4版、DELL G3電腦
workerman和swoole在現(xiàn)階段很受爭議,有時間你得認(rèn)識認(rèn)識,不然你就不是混php圈子的。swoole是使用C語言實現(xiàn)的socket通信框架,workerman則是使用純php實現(xiàn)的socket框架,二者進(jìn)程模型上也存在很多的不同。
master進(jìn)程
這個進(jìn)程比較復(fù)雜,也是我認(rèn)為最核心的進(jìn)程,這是一個包含多線程的進(jìn)程,分別是一個主線程和n個reactor線程(數(shù)量可以配置)。
其中,主線程用于accept新的連接,然后評估一下每個reactor線程負(fù)責(zé)維護(hù)的連接數(shù),然后分配給數(shù)量最少的那個reactor線程,最大程度保證每個reactor線程的負(fù)載量是均衡的。
本質(zhì)上講,一旦一個socket可讀或者可寫了,就由reactor線程發(fā)送給worker進(jìn)程或者發(fā)送會客戶端。除此之外,主線程還負(fù)責(zé)對所有信號的接管,避免reactor線程收到信號的打擾中斷。
說的洋氣點(diǎn)兒就是:master進(jìn)程負(fù)責(zé)了連接的accept、托管、socket的可讀可寫(數(shù)據(jù)的發(fā)送和接受),本質(zhì)上講,master進(jìn)程負(fù)責(zé)了IO。還需要注意一點(diǎn)兒的是reactor線程是徹底的全異步非阻塞工作方式。
manager進(jìn)程
manager進(jìn)程是worker進(jìn)程和taskworker進(jìn)程的媽,說的洋氣點(diǎn)兒就是manager進(jìn)程fork出來了worker進(jìn)程和taskworker進(jìn)程,生出來了就得管,所以,manager進(jìn)程得負(fù)責(zé)對worker進(jìn)程和taskworker進(jìn)程的撫養(yǎng)義務(wù),具體包括監(jiān)控它們的狀態(tài)、當(dāng)它們意外掛了后重新拉起一個新的進(jìn)程(避免了僵尸進(jìn)程)、平滑重啟(就是傳說中的reload)。
worker進(jìn)程
worker進(jìn)程是manager進(jìn)程fork出來的,這個進(jìn)程說白了就是搬磚干活(官方文檔中屢次提到的業(yè)務(wù)代碼),其實就是平時碼的那些curd業(yè)務(wù)邏輯代碼,懂了吧?只不過worker進(jìn)程比較diao的是,這個進(jìn)程可以用異步方式去工作,也可以用同步方式去工作。如果聽不懂什么意思,那就先背過,先混個臉熟再說。
taskworker進(jìn)程
taskworker進(jìn)程(后文中稱tasker進(jìn)程)實際本質(zhì)上也是worker進(jìn)程,只不過是一種特殊的worker進(jìn)程。如果你的worker進(jìn)程中存在一些耗時耗力的操作,那么可以先拋給tasker進(jìn)程,自己先去干別的,等tasker干完了,再由worker進(jìn)程取回,非常diao。但是tasker進(jìn)程只能工作在同步方式下,并不能使用異步。這就是為什么tasker進(jìn)程不可以使用定時器,而worker進(jìn)程可以使用定時器的原因。
簡單總結(jié)混在一起說下這幾種進(jìn)程之間是怎么搭配起來干活的。見說來說,就是master進(jìn)程就是接活兒的銷售,但是具體干活則由worker進(jìn)程來做,如果worker進(jìn)程感覺到某些流程太繁忙復(fù)雜就可以讓tasker進(jìn)程來做。而manager進(jìn)程就是后勤worker進(jìn)程和takser進(jìn)程的人力資源保障部,負(fù)責(zé)他們的生死存亡和吃喝拉撒。
workerman
而workerman的進(jìn)程模型相對就要簡單很多了,首先相對于swoole來說,workerman沒有swoole中的reator線程,其次workerman沒有用于處理普通業(yè)務(wù)的worker進(jìn)程以及tasker進(jìn)程。而workerman的話,socket是由worker進(jìn)程負(fù)責(zé)的,swoole中則是由主進(jìn)程中的reactor線程來負(fù)責(zé)的。而swoole在接受到數(shù)據(jù)后,可以通過自己的worker進(jìn)程來處理業(yè)務(wù)(有點(diǎn)兒類似于fpm進(jìn)程)。
workerman是一個高性能的PHP socket 服務(wù)器框架,workerman基于PHP多進(jìn)程以及l(fā)ibevent事件輪詢庫,PHP開發(fā)者只要實現(xiàn)一兩個接口,便可以開發(fā)出自己的網(wǎng)絡(luò)應(yīng)用,例如Rpc服務(wù)、聊天室服務(wù)器、手機(jī)游戲服務(wù)器等。
workerman的目標(biāo)是讓PHP開發(fā)者更容易的開發(fā)出基于socket的高性能的應(yīng)用服務(wù),而不用去了解PHP socket以及PHP多進(jìn)程細(xì)節(jié)。 workerman本身是一個PHP多進(jìn)程服務(wù)器框架,具有PHP進(jìn)程管理以及socket通信的模塊,所以不依賴php-fpm、nginx或者apache等這些容器便可以獨(dú)立運(yùn)行
感謝各位的閱讀!關(guān)于“workerman和swoole有哪些區(qū)別”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!