午夜免费_欧美一级免费看_欧美日韩一区二区视频在线观看_午夜视频在线_日本特黄a级高清免费大片_成年人黄色小视频

Context上下文管理器

Swoole中,由于多个协程是并发执行的,因此不能使用类静态变量/全局变量保存协程上下文内容。使用局部变量是安全的,因为局部变量的值会自动保存在协程栈中,其他协程访问不到协程的局部变量。

Swoole属于常驻内存,在特殊情况下声明变量,需要进行手动释放,释放不及时,会导致非常大的内存开销,使服务宕掉。

ContextManager上下文管理器存储变量会自动释放内存,避免开发者不小心而导致的内存增长。

原理

  • 通过当前协程idkey来存储该变量。
  • 注册defer函数。
  • 协程退出时,底层自动触发defer进行回收。

安装

EasySwoole默认加载该组件,无须开发者引入。在非EasySwoole框架中使用,开发者可自行引入。

composer require easyswoole/component

基础例子

use EasySwoole\Component\Context\ContextManager;
go(function (){
    ContextManager::getInstance()->set('key','key in parent');
    go(function (){
        ContextManager::getInstance()->set('key','key in sub');
        var_dump(ContextManager::getInstance()->get('key')." in");
    });
    \co::sleep(1);
    var_dump(ContextManager::getInstance()->get('key')." out");
});

以上利用上下文管理器来实现协程上下文的隔离。

自定义处理项

例如,当有一个key,希望在协程环境中,get的时候执行一次创建,在协程退出的时候可以进行回收,就可以注册一个上下文处理项来实现。该场景可以用于协程内数据库短连接管理。

use EasySwoole\Component\Context\ContextManager;
use EasySwoole\Component\Context\ContextItemHandlerInterface;

class Handler implements ContextItemHandlerInterface
{

    function onContextCreate()
    {
        $class = new \stdClass();
        $class->time = time();
        return $class;
    }

    function onDestroy($context)
    {
        var_dump($context);
    }
}

ContextManager::getInstance()->registerItemHandler('key',new Handler());

go(function (){
    go(function (){
        ContextManager::getInstance()->get('key');
    });
    \co::sleep(1);
    ContextManager::getInstance()->get('key');
});
主站蜘蛛池模板: 91精品在线观| 99热在线观看精品 | 亚色中文 | 免费观看福利视频 | 美女一区二区三区视频 | 91视频在线免费观看 | 91免费视频在线 | 国产成人午夜精品影院游乐网 | 一区二区三区四区久久 | 一二三区精品视频 | 91免费视频网址 | 亚洲精品菠萝久久久久久久 | 91精品久久久久久久久久入口 | 免费看一区二区三区 | 91免费观看网站 | 99久久夜色精品国产亚洲96 | 国产在线麻豆 | 91免费影片 | 91.xxx.高清在线 | 亚洲成色www久久网站瘦与人 | 久久久二区 | 天天撸日日夜夜 | 91视频免费入口 | 三区在线观看 | 国产成人免费在线 | 91精品大片 | 免费级毛片 | 一区二区三区久久 | 91啦在线视频 | 77久久| 国产成人久久久精品免费澳门 | 91亚洲国产成人精品一区二三 | 午夜剧场成人 | 国产精品乱码久久久久久久 | 中文字幕不卡一区 | 91精品在线观看入口 | 一区二区在线免费视频 | 亚洲涩涩图 | 午夜免费播放观看在线视频 | 91高清视频在线 | 日本成人网址 |