swoole 启动流程_swoole| swoole 协程初体验

本文介绍了Swoole协程的执行顺序,通过实例展示了如何创建和调度协程,解释了协程为何比传统方式更快,并与Go协程进行了对比。文中还探讨了Swoole协程在IO密集型任务中的性能提升,以及与Go协程调度模型的差异。最后,文章提到了Swoole协程在实际应用中的注意事项和未来发展的可能性。
摘要由CSDN通过智能技术生成

折腾 swoole 协程有一段时间了, 总结一篇入门贴, 希望对新手有帮助.

内容概览:协程的执行顺序: 初窥 swoole 中协程的调度

协程为什么快: 减少IO阻塞带来的性能损耗

swoole 协程和 go 协程对比: 单进程 vs 多线程

协程的执行顺序

先来看看基础的例子:go(function () {    echo "hello go1 \n";

});echo "hello main \n";

go(function () {    echo "hello go2 \n";

});

go() 是 \Co::create() 的缩写, 用来创建一个协程, 接受 callback 作为参数, callback 中的代码, 会在这个新建的协程中执行.

备注: \Swoole\Coroutine 可以简写为 \Co

上面的代码执行结果:root@b98940b00a9b /v/w/c/p/swoole# php co.phphello go1

hello main

hello go2

执行结果和我们平时写代码的顺序, 好像没啥区别. 实际执行过程:运行此段代码, 系统启动一个新进程

遇到 go(), 当前进程中生成一个协程, 协程中输出 heelo go1, 协程退出

进程继续向下执行代码, 输出 hello main

再生成一个协程, 协程中输出 heelo go2, 协程退出

运行此段代码, 系统启动一个新进程. 如果不理解这句话, 你可以使用如下代码:// co.php<?phpsleep (100);

执行并使用 ps aux 查看系统中的进程:root@b98940b00a9b /v/w/c/p/swoole# php co.php &

root@b98940b00a9b /v/w/c/p/swoole# ps auxPID   USER     TIME   COMMAND    1 root       0:00 php -a   10 root       0:00 sh   19 root       0:01 fish  749 root       0:00 php co.php  760 root       0:00 ps aux

我们来稍微改一改, 体验协程的调度:use Co;

go(function () {

Co::sleep(1); // 只新增了一行代码

echo "hello go1 \n";

});echo "hello main \n";

go(function () {    echo "hello go2 \n";

});

\Co::sleep() 函数功能和 sleep() 差不多, 但是它模拟的是 IO等待(IO后面会细讲). 执行的结果如下:root@b98940b00a

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值