国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

守護(hù)模式,子線程一個(gè)崩潰會(huì)導(dǎo)致所有線程都崩潰、重啟嗎?

klyz505

守護(hù)模式,子線程一個(gè)崩潰會(huì)導(dǎo)致所有線程都崩潰、重啟嗎?

情況是這樣,用workerman弄了個(gè)【任務(wù)處理器】,300子線程,text協(xié)議,不對(duì)外,只用于本機(jī)環(huán)回地址(127.0.0.1)的使用。
然后每個(gè)用戶能開啟或關(guān)閉自己的任務(wù),每一個(gè)任務(wù)都是一個(gè)workerman★任務(wù)監(jiān)控器★,php start的workerman實(shí)例,主線程,1子線程。一旦用戶開啟自己的任務(wù),就會(huì)在一定條件下觸發(fā)任務(wù)的執(zhí)行處理,觸發(fā)任務(wù)需要處理時(shí),★任務(wù)監(jiān)控器★是不執(zhí)行任務(wù)處理的,它會(huì)把數(shù)據(jù)發(fā)送給【任務(wù)處理器】去處理。
大概是這樣:
用戶1★任務(wù)監(jiān)控器★----->通知【任務(wù)處理器】處理任務(wù)
用戶2★任務(wù)監(jiān)控器★----->通知【任務(wù)處理器】處理任務(wù)
用戶3★任務(wù)監(jiān)控器★----->通知【任務(wù)處理器】處理任務(wù)
……

整體結(jié)構(gòu)大概是:

★任務(wù)監(jiān)控器★ 里,$worker = new Worker()
$worker觸發(fā)任務(wù)時(shí),$at = new AsyncTcpConnection(),$at->send()數(shù)據(jù)給【任務(wù)處理器】,redis統(tǒng)計(jì)線程使用+1
【任務(wù)處理器】處理完,send()任務(wù)完成字符通知$at,$at->onMessage里 redis統(tǒng)計(jì)線程使用-1

正常跑,沒問題。但發(fā)現(xiàn)【任務(wù)處理器】發(fā)生錯(cuò)誤(原因未知,找不出來,workerman的日志里沒有報(bào)錯(cuò),我自己的日志里也沒有報(bào)錯(cuò)),這個(gè)先不管,就是【任務(wù)處理器】發(fā)生錯(cuò)誤后(跑了十幾個(gè)小時(shí)后出現(xiàn)),redis統(tǒng)計(jì)線程使用 不會(huì)-1,在高并發(fā)的時(shí)候,redis統(tǒng)計(jì)線程使用 數(shù)量馬上就上去了。
【任務(wù)處理器】結(jié)構(gòu)大概是:

$worker = new Worker(...);
$worker->onMessage = function($connection, $data){
        $xxx = new xxx();
        xxx->yyy();

        $connection->send(json_encode([
            'event'=>'success',
            'msg'=>'處理完畢',
        ]));
}

沒有return跳過$connection->send(),只可能是xxx->yyy()出了問題(這個(gè)我會(huì)繼續(xù)排查)。但現(xiàn)在的這種情況,是不是意味著:一旦【任務(wù)處理器】的300個(gè)子線程里只要有一個(gè)子線程發(fā)生崩潰,就會(huì)導(dǎo)致300個(gè)子線程全部崩潰或者處理不了任務(wù)?然后守護(hù)進(jìn)程是會(huì)自動(dòng)把【任務(wù)處理器】重啟繼續(xù)跑?這樣一個(gè)用戶出問題,就影響了所有用戶……

這樣的話,是不是我應(yīng)當(dāng)為每個(gè)用戶分配一個(gè)獨(dú)立自用的【任務(wù)處理器】?這樣一個(gè)用戶一旦出問題,不會(huì)影響其他用戶?

1232 1 0
1個(gè)回答

six

workerman是多進(jìn)程,不是多線程。一個(gè)進(jìn)程報(bào)錯(cuò),不影響其它進(jìn)程。

年代過于久遠(yuǎn),無(wú)法發(fā)表回答
??