## 创建协程 xgo + Channel 基本用法: [>> 到 GitHub 查看 DEMO <<](https://github.com/mix-php/mix-skeleton/blob/master/app/Console/Commands/CoroutineCommand.php) ## 讲解 - 首先使用 xgo 方法,以闭包的形式开启一个协程。 - 接下来在 for 循环中,使用 xgo 以 callable 的方式启动子协程,并传递一个 Channel 参数。 - 代码在 `xgo([$this, 'foo'], $chan);` 那里并不会阻塞,而是继续往下执行 - 执行到 `$chan->pop()` 时,由于 sql 查询还未执行,于是当前协程阻塞,释放执行流到 `foo` 方法中执行sql - 当 sql 执行完时, `$chan->pop()` 被唤醒并返回数据,继续往下执行。 - 直到循环执行完毕,`println` 打印总执行时间。 - 输出 `Time: 5s ` 说明两次 SQL 查询是并行执行的。