PHP协程代码执行顺序

看到一段协程代码,不是很懂,为什么结果是0321的顺序?

<?php 
$n = 4;
for ($i = 0; $i < $n; $i++) {
    go(function () use ($i) {
        Co::sleep(1);
        echo "hello $i \n";
    });
};
echo "hello main \n";
结果:
hello main
hello 0
hello 3
hello 2
hello 1
阅读 2.6k
2 个回答

协程是“并发”执行的,没有顺序。

和底层实现有关,因为Swoole底层的sleep是通过堆这个数据结构来进行管理的:
30331583743007_.pic.jpg

看不懂这幅图可以先学习下堆这个数据结构。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题