swoole如何運(yùn)行

?swoole如何運(yùn)行

線程模式(swoole_BASE)

這種模式就是傳統(tǒng)的異步非阻塞Server。與nginx和Node.JS等程序是完全一致的。? ? ? ? ? ? ? (推薦學(xué)習(xí): swoole視頻教程

在時(shí)間循環(huán)中直接回調(diào)php的函數(shù),而不是dispatch投遞任務(wù)。如果回調(diào)函數(shù)中有阻塞操作會(huì)導(dǎo)致Server退化為同步模式。worker_num參數(shù)對(duì)與BASE模式仍然有效,會(huì)啟動(dòng)多個(gè)Worker進(jìn)程。

BASE模式下沒(méi)有Master進(jìn)程的角色

每個(gè)Worker進(jìn)程同時(shí)承擔(dān)了Process模式下Reactor線程和Worker進(jìn)程兩部分職責(zé)

BASE模式下Manager進(jìn)程是可選的,當(dāng)設(shè)置了worker_num=1,并且沒(méi)有使用Task和MaxRequest特性時(shí),底層將直接創(chuàng)建一個(gè)單獨(dú)的Worker進(jìn)程,不創(chuàng)建Manager進(jìn)程

BASE模式的優(yōu)點(diǎn):

BASE模式?jīng)]有IPC開銷,性能更好

BASE模式代碼更簡(jiǎn)單,不容易出錯(cuò)

BASE模式的缺點(diǎn):

TCP連接是在Worker進(jìn)程中維持的,所以當(dāng)某個(gè)Worker進(jìn)程掛掉時(shí),此Worker內(nèi)的所有連接都將被關(guān)閉

少量TCP長(zhǎng)連接無(wú)法利用到所有Worker進(jìn)程

TCP連接與Worker是綁定的,長(zhǎng)連接應(yīng)用中某些連接的數(shù)據(jù)量大,這些連接所在的Worker進(jìn)程負(fù)載會(huì)非常高。但某些連接數(shù)據(jù)量小,所以在Worker進(jìn)程的負(fù)載會(huì)非常低,不同的Worker進(jìn)程無(wú)法實(shí)現(xiàn)均衡。

BASE模式的適用場(chǎng)景:

如果客戶端連接之間不需要交互,可以使用BASE模式。如memcachehttp服務(wù)器等。

進(jìn)程模式(SWOOLE_PROCESS)

多進(jìn)程模式是最復(fù)雜的方式,用了大量的進(jìn)程間通信、進(jìn)程管理機(jī)制。適合業(yè)務(wù)邏輯非常復(fù)雜的場(chǎng)景。Swoole提供了完善的進(jìn)程管理、內(nèi)存保護(hù)機(jī)制。 在業(yè)務(wù)邏輯非常復(fù)雜的情況下,也可以長(zhǎng)期穩(wěn)定運(yùn)行。

Swoole在Reactor線程中提供了Buffer的功能,可以應(yīng)對(duì)大量慢速連接和逐字節(jié)的惡意客戶端。另外也提供了CPU親和設(shè)置選項(xiàng),使程序運(yùn)行的效率更好。

進(jìn)程模式的優(yōu)點(diǎn):

連接與數(shù)據(jù)請(qǐng)求發(fā)送是分離的,不會(huì)因?yàn)槟承┻B接數(shù)據(jù)量大某些連接數(shù)據(jù)量小導(dǎo)致Worker進(jìn)程不均衡

Worker進(jìn)程發(fā)送致命錯(cuò)誤時(shí),連接并不會(huì)被切斷

可實(shí)現(xiàn)單連接并發(fā),僅保持少量TCP連接,請(qǐng)求可以并發(fā)地在多個(gè)Worker進(jìn)程中處理

進(jìn)程模式的缺點(diǎn):

存在2次IPC的開銷,master進(jìn)程與worker進(jìn)程需要使用UnixSocket進(jìn)行通信

不支持某些高級(jí)功能,如sendwait、pause、resume等操作

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊10 分享