国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

swoole教程第一節(jié):進(jìn)程管理模塊(Process)-中(消息隊(duì)列)

A Loity / 487人閱讀

摘要:不多說(shuō),上代碼這段代碼出自消息隊(duì)列我想說(shuō)五個(gè)點(diǎn)的創(chuàng)建默認(rèn)是創(chuàng)建的管道,當(dāng)想用消息隊(duì)列時(shí),記得把參數(shù)設(shè)成其實(shí)我發(fā)現(xiàn)不寫(xiě)也行要在的之前調(diào)用,方法默認(rèn)是阻塞的一定一定要寫(xiě)這里坑死不少人還有第五點(diǎn)注意事項(xiàng),我接下來(lái)重點(diǎn)說(shuō),因?yàn)檫@個(gè)點(diǎn)卡了我好久。

不多說(shuō),上代碼

useQueue();
    $pid = $process->start();
    $workers[$pid] = $process;
    //echo "Master: new worker, PID=".$pid."
";
}

function callback_function(swoole_process $worker)
{
    //echo "Worker: start. PID=".$worker->pid."
";
    //recv data from master
    $recv = $worker->pop();

    echo "From Master: $recv
";

    sleep(2);
    $worker->exit(0);
}

foreach($workers as $pid => $process)
{
    $process->push("hello worker[$pid]
");
}

for($i = 0; $i < $worker_num; $i++)
{
    $ret = swoole_process::wait();
    $pid = $ret["pid"];
    unset($workers[$pid]);
    echo "Worker Exit, PID=".$pid.PHP_EOL;
}

這段代碼出自 消息隊(duì)列

我想說(shuō)五個(gè)點(diǎn)

swoole_process 的創(chuàng)建默認(rèn)是創(chuàng)建的管道,當(dāng)想用消息隊(duì)列時(shí),記得把參數(shù)設(shè)成false(其實(shí)我發(fā)現(xiàn)不寫(xiě)也行)

useQueue要在start的之前調(diào)用,

pop方法 默認(rèn)是阻塞的

一定一定要寫(xiě)wait(這里坑死不少人)

還有第五點(diǎn)注意事項(xiàng),我接下來(lái)重點(diǎn)說(shuō),因?yàn)檫@個(gè)點(diǎn)卡了我好久。

嘛,demo里面只是說(shuō)主進(jìn)程向子進(jìn)程發(fā)數(shù)據(jù),沒(méi)有子進(jìn)程向主進(jìn)程發(fā)數(shù)據(jù),我就來(lái)加上吧

useQueue();
    $pid = $process->start();
    $workers[$pid] = $process;
    //echo "Master: new worker, PID=".$pid."
";
}

function callback_function(swoole_process $worker)
{
    //echo "Worker: start. PID=".$worker->pid."
";
    //recv data from master
    $recv = $worker->pop();
    echo "From Master: $recv
";
    $worker->push(" 
   hehe   
 ");//這里子進(jìn)程向主進(jìn)程發(fā)送  hehe
    sleep(2);//注意這里有個(gè)sleep
    $worker->exit(0);

}

foreach($workers as $pid => $process)
{
    $process->push("hello worker[$pid]
");
    $result = $process->pop();
    echo "From worker: $result
";//這里主進(jìn)程,接受到的子進(jìn)程的數(shù)據(jù)
}

for($i = 0; $i < $worker_num; $i++)
{
    $ret = swoole_process::wait();
    $pid = $ret["pid"];
    unset($workers[$pid]);
    echo "Worker Exit, PID=".$pid.PHP_EOL;
}

運(yùn)行結(jié)果完美,我就不貼了,
我看著代碼,忽然發(fā)現(xiàn)自己沒(méi)把sleep刪掉,然后噩夢(mèng)開(kāi)始
大家把上面代碼的sleep注釋后運(yùn)行看看,我這里貼上我的運(yùn)行結(jié)果

From Master: hello worker[3667]

From worker:  
   hehe   

PHP Warning:  swoole_process::push(): msgsnd() failed. Error: Invalid argument[22] in /home/sun/learn/swoole/process/demo.php on line 28
PHP Warning:  swoole_process::pop(): msgrcv() failed. Error: Invalid argument[22] in /home/sun/learn/swoole/process/demo.php on line 29
From worker: 
PHP Warning:  swoole_process::pop(): msgrcv() failed. Error: Identifier removed[43] in /home/sun/learn/swoole/process/demo.php on line 18
From Master: 
PHP Warning:  swoole_process::push(): msgsnd() failed. Error: Invalid argument[22] in /home/sun/learn/swoole/process/demo.php on line 20
Worker Exit, PID=3668
Worker Exit, PID=3667

這就是我的報(bào)錯(cuò),我看這個(gè)錯(cuò)誤,發(fā)現(xiàn)第一個(gè)進(jìn)程是完美執(zhí)行的,和預(yù)先想的一樣,錯(cuò)誤出在主進(jìn)程第二次發(fā)送消息到消息隊(duì)列時(shí)出現(xiàn)的,主進(jìn)程的數(shù)據(jù)發(fā)送出錯(cuò)了

哎呀,怎么回事,不明白。
其實(shí)故事是這樣的
主進(jìn)程創(chuàng)建兩個(gè)子進(jìn)程,這里沒(méi)問(wèn)題
主進(jìn)程向第一個(gè)子進(jìn)程發(fā)數(shù)據(jù),第一個(gè)子進(jìn)程收到后向主進(jìn)程回發(fā)數(shù)據(jù),這里也沒(méi)問(wèn)題
主進(jìn)程再向第二個(gè)子進(jìn)程發(fā)數(shù)據(jù),好,出問(wèn)題了,
那么 問(wèn)題來(lái)了,第一個(gè)子進(jìn)程做了什么我們不知道的事情?
請(qǐng)看這里 子進(jìn)程臨死前做了什么

  

$status是退出進(jìn)程的狀態(tài)碼,如果為0表示正常結(jié)束,會(huì)繼續(xù)執(zhí)行PHP的shutdown_function,其他擴(kuò)展的 清理工作

第一個(gè)子進(jìn)程臨死前把消息隊(duì)列給埋了

換句話說(shuō),主進(jìn)程再想往消息隊(duì)列里寫(xiě)東西時(shí)寫(xiě)不了了,因?yàn)闆](méi)有消息隊(duì)列了。

那為什么剛開(kāi)始有sleep的時(shí)候就沒(méi)事呢?

因?yàn)槌弥谝粋€(gè)子進(jìn)程睡覺(jué)的時(shí)候,主進(jìn)程和第二個(gè)子進(jìn)程把事情做了

那么我們?cè)趺崔k?怎么才能不讓子進(jìn)程摧毀消息隊(duì)列??

  

把 swoole_process->exit(0) 改成 swoole_process->exit(1)了

這是我要說(shuō)的第五點(diǎn)

  

多個(gè)子進(jìn)程使用消息隊(duì)列通訊一定寫(xiě)上 $process->exit(1)

好的,基本上遵守這五條,使用消息隊(duì)列就不會(huì)有什么問(wèn)題了。最后請(qǐng)記得升級(jí)自己的swoole版本,因?yàn)橛行﹩?wèn)題可能是因?yàn)槟愕陌姹咎狭?/p>

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/21065.html

相關(guān)文章

  • swoole教程一節(jié):進(jìn)程管理模塊(Process)-上

    摘要:當(dāng)子進(jìn)程都完成了,主進(jìn)程開(kāi)始繼續(xù)業(yè)務(wù)。是子進(jìn)程的句柄子進(jìn)程句柄向自己管道里寫(xiě)內(nèi)容子進(jìn)程句柄從自己的管道里面讀取信息這里是子進(jìn)程哦貼上運(yùn)行結(jié)果喔,通訊是這樣的。我們?cè)倏纯磩?chuàng)建進(jìn)程時(shí)第二個(gè)參數(shù)的說(shuō)明,重定向子進(jìn)程的標(biāo)準(zhǔn)輸入和輸出。 進(jìn)程管理模塊 介紹看這里 swoole的process 大家可以先看看自己的swoole版本,在命令行里面敲 php --ri swoole ...

    Towers 評(píng)論0 收藏0
  • PHP多進(jìn)程系列筆記(五)

    摘要:消息隊(duì)列更常見(jiàn)的用途是主進(jìn)程分配任務(wù),子進(jìn)程消費(fèi)執(zhí)行。子進(jìn)程前面加了個(gè),這是為了防止父進(jìn)程還未往消息隊(duì)列中加入內(nèi)容直接退出。 前面幾節(jié)都是講解pcntl擴(kuò)展實(shí)現(xiàn)的多進(jìn)程程序。本節(jié)給大家介紹swoole擴(kuò)展的swoole_process模塊。 swoole多進(jìn)程 swoole_process 是swoole提供的進(jìn)程管理模塊,用來(lái)替代PHP的pcntl擴(kuò)展。 首先,確保安裝的swoole...

    qianfeng 評(píng)論0 收藏0
  • Swoole-2.1.2 進(jìn)程模塊的使用

    摘要:在版本中我們將的進(jìn)程管理模塊封裝成了類(lèi),現(xiàn)在可以在代碼中使用的進(jìn)程管理器了。提供的進(jìn)程管理器來(lái)自于,經(jīng)過(guò)大量生產(chǎn)項(xiàng)目驗(yàn)證,穩(wěn)定性和健壯性都非常高。三任務(wù)投遞進(jìn)程管理器自帶了消息隊(duì)列和消息投遞的支持。 在Swoole-2.1.2版本中我們將Server的進(jìn)程管理模塊封裝成了PHP類(lèi),現(xiàn)在可以在PHP代碼中使用Swoole的進(jìn)程管理器了。 在實(shí)際項(xiàng)目中經(jīng)常需要寫(xiě)一些長(zhǎng)期運(yùn)行的腳本,如基于r...

    ZoomQuiet 評(píng)論0 收藏0
  • Swoft 源碼剖析 - Swoole和Swoft的那些事(Task投遞/定時(shí)任務(wù)篇)

    摘要:作為定時(shí)任務(wù)的執(zhí)行者,通過(guò)每喚醒自身一次,然后把執(zhí)行表遍歷一次,挑選當(dāng)下需要執(zhí)行的任務(wù),通過(guò)投遞出去并更新該任務(wù)執(zhí)行表中的狀態(tài)。 作者:bromine鏈接:https://www.jianshu.com/p/b44...來(lái)源:簡(jiǎn)書(shū)著作權(quán)歸作者所有,本文已獲得作者授權(quán)轉(zhuǎn)載,并對(duì)原文進(jìn)行了重新的排版。Swoft Github: https://github.com/swoft-clou.....

    vvpvvp 評(píng)論0 收藏0
  • swoole_process父子進(jìn)程管道通信案例

    摘要:話不多說(shuō)直接上代碼創(chuàng)建的子進(jìn)程獲取異步獲取更高性能啟動(dòng)子進(jìn)程子進(jìn)程處理邏輯異步非阻塞網(wǎng)關(guān)連接失敗讀取父進(jìn)程管道消息父進(jìn)程獲取子進(jìn)程的管道消息子進(jìn)程消息子進(jìn)程的客戶端可以忽略不計(jì),本只是 話不多說(shuō)直接上代碼 創(chuàng)建的子進(jìn)程: public function __construct() { $this->redis = Container::get(SwooleR...

    Cheng_Gang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<