php swoole协程,Swoole协程的执行顺序?

6a1c492cfc468837d9597a4cfe6f4689.png

在一个worker里,我们几乎可以随意起多个协程,如下面的代码

for ($i = 0; $i < 4; $i++) {

Swoole\Coroutine::Create(function () use ($i) {

Swoole\Coroutine::sleep(1);

echo "hello $i \n";

});

};

echo "hello main \n";

那他的执程流程如下:

1、进入for,创建一个协程

2、执行协程的回调函数

3、执行sleep,协程挂起,继续执行循环 1~3

4、循环4次完成,执行 echo 'hello main'

5、sleep 完成,挂起的4个协程依次被唤起,执行 echo 'hello $i'

这里面有几个核心的概念

1、代码是依次执行的

2、协程可以被挂起,(一般碰到i/o,会自动挂起)

要理解这个问题,先要了解一般的重启作法

1、先stop, 后start

如果是这种,从开始stop,到最后start服务起来,必然会有时间差,如果不做任何措施,必然会丢失这个时间差里的请求,那我们一般可以怎么处理呢?

如果是单实例,这问题无解,所以我们一般要做多实例,然后顺序重启,stop前,可以在前面的proxy里先摘除掉, start成功后,再注册上。这样一般就能保障请求不丢失。现在的很多服务治理会把这个问题考虑进去了

2、reload模式

像nginx, Swoole都支持, 这种的实现机制和一般是发一个信号给master进程,master进程收到这个信号之后,先起一组新的worker接收请求,让现有的worker停止接收新请求,老请求处理完成之后,自动退出。

最后,科普一下提问的智慧:

尝试在你准备提问论坛的历史文档中搜索答案

尝试搜索互联网以找到答案

尝试阅读手册以找到答案

尝试阅读“常见问题文档”(FAQ)以找到答案

尝试自己检查或试验以找到答案

尝试请教懂行的朋友以找到答案

切记抛出文档里有明确解释的问题、也切记抛出太开放性的问题,问题最好能专一、且有上下文!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值