首页
下载
文档
社区
视频
捐赠
源代码
赞助商
AOT 编译器
AI 助理
商业产品
PHP AOT 原生编译器
Swoole-Compiler 代码加密器
CRMEB 新零售社交电商系统
登录
注册
全部
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
发表新帖
桶哥的相关问题讨论。
问题地址: https://mp.weixin.qq.com/s?__biz=MzI0MjEwMDMzNQ==&mid=2652517797&idx=1&sn=62cd5472e5e71197f1be87df3e2d08ed&chksm=f2efe4a5c5986db302676b3e0a598bae069af955fa7588e237f2d18c304ea70f8161284f4c57&token=388728125&lang=zh_CN#rd 欢迎大家一起讨论交流。
发布于6年前 · 11 次浏览 · 来自
讨论
桶
桶哥
问题地址: https://mp.weixin.qq.com/s?__biz=MzI0MjEwMDMzNQ==&mid=2652517797&idx=1&sn=62cd5472e5e71197f1be87df3e2d08ed&chksm=f2efe4a5c5986db302676b3e0a598bae069af955fa7588e237f2d18c304ea70f8161284f4c57&token=388728125&lang=zh_CN#rd 欢迎大家一起讨论交流。
赞
0
收藏
提问
分享
讨论
建议
公告
开发框架
CodeGalaxy
登录
后参与评论
评论
2020-03-09
komorebi
1.协程是无序的。所以顺序不一定是 0 1 2 3; 2.结果是0 1 2 3;因为for循环里只创建里协程,并每天IO操作。因此在这里创建协程我觉得是多余的。 3.如果在重启的过程中,遇见大量的请求可能会造成请求丢失.(没有真实遇见过)
赞
0
回复
2020-03-10
冷
冷心
回复
komorebi
对 这个保证不了调度顺序,只所以结果是 0 1 2 3 是因为底层定时器用的堆数据结构,没必要深追这个。
赞
0
回复
2020-03-10
桶
桶哥
回答的挺好的,关于顺序是比较稳定的 0 3 2 1, 是底层定时器用的堆数据结构导致的。 两种方案都有些问题吧,我列几个,大家也可以来补充。 1、顺序重启的话,如果机器比较多,会非常慢,不过现在都容器化了,可以做并处理了 2、reload的话,如果旧进程里还有定时器、或者一些while,或者一些长时间的任务,会导致旧进程一直不回收,不过swoole提供了超时配置,超时之后强杀,强杀的负作用就是正在进程的处理可能会导致异常
赞
0
回复
2020-03-13
havll
回复
桶哥
"关于顺序是比较稳定的 0 3 2 1, 是底层定时器用的堆数据结构导致的" 桶哥,为什么底层定时器用堆数据结构会导致0321这种结果,求教。
赞
0
回复
2020-03-12
lg430
第二个问题, 我这里不是进程重启, 而是服务器重启, 由此导致的服务平滑过度问题. 我这是tcp微服务,单独开了个进程用于上报心跳和读取worker进程发来的消息写日志, 使用$server->addProcess的方式; 在服务器重启时, 我尝试通过提前将心跳进程kill掉, 来实现LB层摘除, 等上个十几秒后再关闭tcp服务, 来实现平滑过渡, 如下 1. 向此进程发送SIGTERM信号, 但是被manager进程重新拉起, 此方法失败; 2. 代码如下 ``` Process::signal(SIGTERM, function () use ($process) { // ... }); ``` 此信号也会导致进程重启, 失败 请问有实现平滑过度吗
赞
0
回复
2020-03-12
桶
桶哥
回复
lg430
可以不kill进程,直接把心跳的定时器给清理不就OK了?
赞
0
回复
2020-03-12
lg430
回复
桶哥
心跳是其他部门用c++扩展实现的, 没法操作呢
赞
0
回复