当前位置: PHP > swoole > hyperf 协程数据混淆的思考和分析

hyperf 协程数据混淆的思考和分析

2022-02-20 分类:swoole 作者:admin 阅读(20)

get 返回的是1 这一步是对的

在这里插入图片描述

第二步 更新值返回更新值是2 也是对的

在这里插入图片描述

第三步 设想是返回1 但是返回的是2
单例对不同请求的影响 怎么处理这种情况往下看

在这里插入图片描述

处理过程
处理方法一:协程上下文
由于同一个进程内协程间是内存共享的,但协程的执行/切换是非顺序的,也就意味着我们很难掌控当前的协程是哪一个*(事实上可以,但通常没人这么干)*,所以我们需要在发生协程切换时能够同时切换对应的上下文。
在 Hyperf 里实现协程的上下文管理将非常简单,基于 Hyperf\Utils\Context 类的 set(string $id, $value)、get(string $id, $default = null)、has(string $id)、override(string $id, \Closure $closure) 静态方法即可完成上下文数据的管理,通过这些方法设置和获取的值,都仅限于当前的协程,在协程结束时,对应的上下文也会自动跟随释放掉,无需手动管理,无需担忧内存泄漏的风险。

第一步请求get方法 返回为空

在这里插入图片描述

第二步更新值 更新返回值为100

在这里插入图片描述

第三步 在获取看看是不是有影响–没有影响

在这里插入图片描述

处理方法二:协程上下文 + 魔术方法

//返回都正常,没有影响

在这里插入图片描述

通过Inject引入的类 – 出现的问题是会影响数据

//影响了数据—无论是不是静态属性,都会在全局共享,所以要把所有的值都存储到协程上下文中,协程上下文会在协程结束的时候释放掉,无需担忧内存泄漏的问题

在这里插入图片描述

那么问题, 如果是这种引入类的方法应该怎么解决呢

//引入这的代码不需要改变

//foo类改变就可以

效果

在这里插入图片描述

来源:https://blog.csdn.net/a603423130/article/details/118053787

「三年博客,如果觉得我的文章对您有用,请帮助本站成长」

赞(0) 打赏

支付宝
微信
0

支付宝
微信
标签:

上一篇:

下一篇:

你可能感兴趣

共有 0 - hyperf 协程数据混淆的思考和分析

博客简介

精彩评论

  • admin(6年前 (2020-03-09))

    分别用不同厚度的筏板定义,画图后这设置筏板变截面处理。 http://f.fwxgx.co...

    评:新文章!
  • admin(6年前 (2020-03-09))

    分别用不同厚度的筏板定义,画图后这设置筏板变截面处理。 http://f.fwxgx.co...

    评:新文章!
  • admin(6年前 (2020-03-09))

    新增一个框架图! http://biji.jinli.vip/wp-content/upl...

    评:新文章!
  • 一位WordPress评论者(6年前 (2020-02-13))

    嗨,这是一条评论。 要开始审核、编辑及删除评论,请访问仪表盘的“评论”页面。 评论者头像来自...

    评:世界,您好!