swoole协程(CoroutineChannel)

mac2024-08-17  67

swoole使用协程顺序执行任务,就需要依赖Channel了。

Channel特点 与容量有关 如果channel未满,push不阻塞,如果已满,push让出控制流; 如果channel为空,pop让出控制流。

具体例子:

<?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 --; } } });

最新回复(0)