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

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

swooletask會不會阻塞-創(chuàng)新互聯(lián)

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

創(chuàng)新互聯(lián)堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站制作、成都網(wǎng)站設(shè)計、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的洱源網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

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

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

worker進程將無法接收新的請求

task 如果阻塞會引發(fā) woker 進程阻塞,造成服務(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的時間依次累加,直到達到較大值 100ms,達到 cpu 使用率和處理數(shù)據(jù)實時性的一個平衡,具體平衡點可以根據(jù)自己的業(yè)務(wù)按需調(diào)整。

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


分享名稱:swooletask會不會阻塞-創(chuàng)新互聯(lián)
文章位置:http://weahome.cn/article/ddjsdh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部