八:模拟go语言封装WaitGroup控制协程的运行顺序
1:首先创建一个文件夹
app
---sync
--WaitGroup.php
2:终端执行 compose init
3:在生成的composer.json中加入如下代码
"autoload": {
"psr-4": {
"App\\": "app/"
}
}
composer.json
{
"name": "administrator/swooleadv",
"require": {},
"autoload": {
"psr-4": {
"App\\": "app/"
}
}
}
4:执行composer dump-autoload
5:将生成的vendor目录上传到服务器
6:WaitGroup中代码:
7:class8.php中的代码
<?php
require_once "vendor/autoload.php";
use App\sync\WaitGroup;
use Swoole\Coroutine as co;
function query(array $sqls){
$mysql=new co\MySQL();
$conn=$mysql->connect(['host' => '192.168.1.139', 'user' => 'root', 'password' => 'SwoftTest@1234', 'database' => 'swoft2',]);
foreach($sqls as $sql){
$statement=$mysql->prepare($sql);
if ($statement == false)
{
var_dump($mysql->errno,$mysql->error);
}
$rows=$statement->execute();
foreach($rows as $row){
foreach($row as $k=>$v){
echo $k."=>".$v.";";
}
}
}
echo PHP_EOL;
}
go(function(){
$wg=new WaitGroup();
$wg->Add(2);//设置协程的数量
go(function() use($wg){
query(["select sleep(3)","select * from user where user_id=1"]);
$wg->Done();
});
go(function() use($wg){
query(["select * from user where user_id=2"]);
$wg->Done();
});
$wg->Wait();
go(function (){
echo "zzz".PHP_EOL;
});
echo "done".PHP_EOL;
});
//执行结果: