swoole协程怎么按代码的执行顺序输出

发布于 2022-09-11 21:51:59 字数 27 浏览 19 评论 0

swoole协程怎么按代码的执行顺序输出

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

山有枢 2022-09-18 21:51:59

使用协程写代码本来就是同步的写法。。。

随心而道 2022-09-18 21:51:59

channel

轮廓§ 2022-09-18 21:51:59

在一个协程中本来就是同步执行的,当正在执行的协程遇到阻塞IO等,那么当前的协程就会挂起来,让出cpu的控制权,那么底层协程调度器就会激活恢复另一个挂起的协程,然后继续从原来挂起的逻辑地方继续往下执行,所以在一个协程中逻辑都是同步执行的。

夜吻♂芭芘 2022-09-18 21:51:59

手动用 Swoole\Coroutine::create(function(){}) 开启的多个协程,
它们之间的通信需要使用 Swoole\Coroutine\Channel.

var_export(get_class_methods('Swoole\Coroutine\Channel'));
可见:
array (
  0 => '__construct', // 通道默认容量为0,表示无缓冲区,push(生成)和pop(消费)操作会立即挂起当前协程.
  1 => '__destruct',
  2 => 'push', // 当队列中有其他协程正在等待pop(消费)数据时,push(生产)操作会自动按顺序唤醒一个消费者协程.当队列已满时自动yield(让出)控制器,等待其他协程pop(消费)数据.
  3 => 'pop', // 当队列为空时自动yield,等待其他协程push(生产)数据.pop(消费)数据后,队列可写入新的数据,自动按顺序唤醒一个生产者协程.
  4 => 'isEmpty', // 检测通道是否为空
  5 => 'isFull', // 检测通道是否已满
  6 => 'close', // 关闭通道,并唤醒所有等待读写的协程.
  7 => 'stats', // 包含信息queue_num(通道中的元素数量)和queue_bytes(通道当前占用的内存字节数).
  8 => 'length', // 通道中的队列长度,等价于 $chan->stats()['queue_num']
  9 => 'select', // 通道读写检测,类似于socket_select和stream_select.
)

对于一些协程客户端,可以直接使用顺序的写法:

$redis = new Swoole\Coroutine\Redis();
$redis->connect(REDIS_SERVER_HOST, REDIS_SERVER_PORT); // 发生协程切换
$redis->set('key1', 'value'); // 发生协程切换
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文