brpc之ResourcePool

简介

ResourcePool用于管理资源,负责资源的分配以及回收

结构

在这里插入图片描述
BlockGroup:资源池中包含多个BlockGroup,最多65536个
Block:一个BlockGroup中包含多个Block,最多(1<<16)个;1个Block中包含BLOCK_NITEM个类型为T的资源,BLOCK_NITEM由类模板ResourcePoolBlockItemNum中的静态成员value决定

template <typename T>
class ResourcePoolBlockItemNum {
    static const size_t N1 = ResourcePoolBlockMaxSize<T>::value / sizeof(T);
    static const size_t N2 = (N1 < 1 ? 1 : N1);
public:
    static const size_t value = (N2 > ResourcePoolBlockMaxItem<T>::value ?
                                 ResourcePoolBlockMaxItem<T>::value : N2);
};

template <typename T> struct ResourcePoolBlockMaxSize {
    static const size_t value = 64 * 1024; // bytes
};
template <typename T> struct ResourcePoolBlockMaxItem {
    static const size_t value = 256;
};

分配

空闲资源的定义是通过ResourcePoolFreeChunk

template <typename T, size_t NITEM> 
struct ResourcePoolFreeChunk {
    size_t nfree;
    ResourceId<T> ids[NITEM];
};
// for gcc 3.4.5
template <typename T> 
struct ResourcePoolFreeChunk<T, 0> {
    size_t nfree;
    ResourceId<T> ids[0];
};

分配规则

  • 优先从LocalPool空闲资源表中分配
  • 如果无法从LocalPool空闲资源表中分配,则从ResourcePool的空闲资源表中分配
  • 从LocalPool中的Block分配
  • 从ResourcePool中BlockGroup的Block分配

相关推荐

  1. brpc单例

    2024-03-17 17:50:05       56 阅读
  2. brpcacceptor&&handler

    2024-03-17 17:50:05       32 阅读
  3. brpc: bthread使用

    2024-03-17 17:50:05       40 阅读
  4. brpc学习实践十三】基于brpc的redis client的实现

    2024-03-17 17:50:05       55 阅读
  5. BRC20 技术分析

    2024-03-17 17:50:05       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-17 17:50:05       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-17 17:50:05       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-17 17:50:05       87 阅读
  4. Python语言-面向对象

    2024-03-17 17:50:05       96 阅读

热门阅读

  1. 求第k小的数

    2024-03-17 17:50:05       42 阅读
  2. 3级考题(3)(c++)

    2024-03-17 17:50:05       41 阅读
  3. 习题11-2 查找星期

    2024-03-17 17:50:05       48 阅读
  4. 数论初步(质数的判断、约数)(c++)

    2024-03-17 17:50:05       43 阅读
  5. Mysql相关

    2024-03-17 17:50:05       45 阅读
  6. Python入门教程(一)|基本语法概述

    2024-03-17 17:50:05       40 阅读
  7. Linux 命令或者一些工具

    2024-03-17 17:50:05       38 阅读
  8. Nginx常用的安全屏蔽规则

    2024-03-17 17:50:05       37 阅读
  9. 项目经验-查询现网调用情况的实践

    2024-03-17 17:50:05       40 阅读
  10. C++ 虚函数表

    2024-03-17 17:50:05       48 阅读
  11. 数据库(一)

    2024-03-17 17:50:05       41 阅读
  12. linux常用命令(二)

    2024-03-17 17:50:05       32 阅读
  13. GDAL for python安装的心酸路

    2024-03-17 17:50:05       41 阅读