真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

swooletask會不會阻塞

這篇文章將為大家詳細(xì)講解有關(guān)swoole task會不會阻塞,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創(chuàng)新互聯(lián)始終堅持【策劃先行,效果至上】的經(jīng)營理念,通過多達(dá)十多年累計超上千家客戶的網(wǎng)站建設(shè)總結(jié)了一套系統(tǒng)有效的推廣解決方案,現(xiàn)已廣泛運(yùn)用于各行各業(yè)的客戶,其中包括:隧道混凝土攪拌車等企業(yè),備受客戶表揚(yáng)。

如果有仔細(xì)看過 swoole task 的文檔的話,應(yīng)該都會注意到這句話

task操作的次數(shù)必須小于onTask處理速度,如果投遞容量超過處理能力,task會塞滿緩存區(qū),導(dǎo)致worker進(jìn)程發(fā)生阻塞。

worker進(jìn)程將無法接收新的請求

task 如果阻塞會引發(fā) woker 進(jìn)程阻塞,造成服務(wù)無法工作,引發(fā)問題。

我曾經(jīng)使用 task 發(fā)送服務(wù)的鏈路日志,接收日志的服務(wù)出現(xiàn)bug,造成發(fā)送日志的 task 阻塞,然后服務(wù) gg 的情況,之后我就對 task 做了一波優(yōu)化。

思路就是使用 swoole channel 和 swoole user process 實現(xiàn)一套 task 。

使用 channel 接收數(shù)據(jù),然后在 user process 消費數(shù)據(jù),假如 channel 滿了僅僅會造成 push 數(shù)據(jù)失敗,并不會引發(fā)阻塞,因為是鏈路日志,是允許丟失的,所以這個方案完全沒問題。

在swoole user process 消費 channel 的策略的偽代碼如下

$sleepTime = 5;
$maxSleepTime = 100;
while (true) {
    $task = $chan->pop();
    if ($task === false) {
        $sleepTime = $sleepTime + 5;
        if ($sleepTime > $maxSleepTime) {
            $sleepTime = $maxSleepTime;
        }
        usleep($sleepTime * 1000);
        continue;
    }
    $sleepTime = 0;
    // 處理數(shù)據(jù)
}

如果消費到channel的數(shù)據(jù),就使用死循環(huán)處理數(shù)據(jù),因為處理數(shù)據(jù)過程中是有其他操作的,所以并不會占用大量 cpu。

如果消費不到數(shù)據(jù),就 sleep 5ms,sleep的時間依次累加,直到達(dá)到最大值 100ms,達(dá)到 cpu 使用率和處理數(shù)據(jù)實時性的一個平衡,具體平衡點可以根據(jù)自己的業(yè)務(wù)按需調(diào)整。

關(guān)于“swoole task會不會阻塞”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。


當(dāng)前文章:swooletask會不會阻塞
本文地址:http://weahome.cn/article/pehigj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部