上一篇从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变量模板参数相同的实例都会共用。

本文深入解析AgentGroup类的定义、成员变量及函数,探讨其在bvar中的作用,特别是对tls数据的分配和管理机制。
—— 核心组件bvar详解(3)AgentGroup类详解&spm=1001.2101.3001.5002&articleId=105396901&d=1&t=3&u=d7907ef68a3549f1b7704840ce0b6655)
1814

被折叠的 条评论
为什么被折叠?



