swoole使用协程顺序执行任务,就须要依赖Channel了。php
Channel特色
与容量有关
若是channel未满,push不阻塞,若是已满,push让出控制流;
若是channel为空,pop让出控制流。swoole
具体例子:ide
<?php use \Swoole\Coroutine\Channel; $chan = new Channel(50); function provider01(Channel $chan) { //睡眠时间可加可不加,单位秒 Co::sleep(1); //一些业务逻辑 $chan->push(['status' => '生产者完成消息01']); } function provider02(Channel $chan) { //睡眠时间可加可不加,单位秒 Co::sleep(1); //一些业务逻辑 $chan->push(['status' => '生产者完成消息02']); } //顺序执行任务 go("provider01", $chan); go("provider02", $chan); go(function() use($chan) { // chan元素个数 $chanNum = 2; // chan有数据时 while($chanNum>0) { $item = $chan->pop(); if($item){ var_dump($item); $chanNum --; } } });