八:模拟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;
});

//执行结果:

posted @ 2019-12-12 10:44  痞子胥  阅读(551)  评论(0编辑  收藏  举报