七:使用channel多协程运行顺序控制的基本方法

一:使用channel多协程运行顺序控制的基本方法

<?php
use Swoole\Coroutine as co;
function query(array $sqls){
$mysql=new co\MySQL();
$conn=$mysql->connect(['host' => '192.168.1.109', 'user' => 'root', 'password' => 'SwoftTest@1234', 'database' => 'swoft2',]);
foreach($sqls as $sql){
$statement=$mysql->prepare($sql);
$rows=$statement->execute();
foreach ($rows as $row)
{
foreach ($row as $k=>$v)
{
echo $k."=>".$v;
}
}
}
echo PHP_EOL;
}

go(function (){
$chan=new co\Channel(2);
go(function() use($chan){//协程1
query(["select sleep(3)","select * from user where user_id=1"]);
$chan->push(1);
});

go(function()use($chan){//协程2
query(["select * from user where user_id=2"]);
$chan->push(2);
});

for ($i=0;$i<2;$i++)
{
$chan->pop();
}
echo "done".PHP_EOL;//待两个协程执行完毕会执行 此输出函数
});


执行结果:


posted @ 2019-12-10 13:56  痞子胥  阅读(716)  评论(0)    收藏  举报