brpc源码解析(十二)—— 核心组件bvar详解(3)AgentGroup类详解

本文深入解析AgentGroup类的定义、成员变量及函数,探讨其在bvar中的作用,特别是对tls数据的分配和管理机制。

上一篇从Reduce和Adder切人整体介绍了下bvar的实现机制,提到了combiner和agent,其中agent负责tls数据的管理和分配,也是bvar最核心的基本机制之一,本篇文章会根据源码介绍下agent的机制。AgentGroup类负责各个agent的分配和管理,采用了块存储。

1. 类基本定义

AgentGroup定义如下:
在这里插入图片描述
类名是AgentGroup,之所以叫group是因为同类型的tls数据会统一管理,模板参数是Agent,使用上传入的是AgentCombiner::Agent包装下的实际类型,比如bvar::Adder value1和bvar::Adder value2所用的会是相同实例化的类,会共用同一个tls存储数组变量。看代码的注释,brpc后续有计划让不同类型的变量也共用一个agentgroup。

类外定义了AgentId,其实就是个int,用来标识变量、在存储块中定位变量位置的,下面会详细介绍。

2. 成员变量

首先是有两个const static的关于每个block存多少个元素的变量,RAW_BLOCK_SIZE和ELEMENTS_PER_BLOCK,根据赋值我们可以知道,如果Agent类型大于等于4096,那么每个块就一个元素,再比如如果Agent类型占1024,那么每块的元素会是4个。
在这里插入图片描述
另外还有四个static变量,因为是static变量模板参数相同的实例都会共用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值