brpc之ResourcePool

2024-03-17 22:28
文章标签 brpc resourcepool

本文主要是介绍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分配

这篇关于brpc之ResourcePool的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/820373

相关文章

brpc profiler

cpu profiler cpu profiler | bRPC MacOS的额外配置 在MacOS下,gperftools中的perl pprof脚本无法将函数地址转变成函数名,解决办法是: 安装standalone pprof,并把下载的pprof二进制文件路径写入环境变量GOOGLE_PPROF_BINARY_PATH中安装llvm-symbolizer(将函数符号转化为函数

brpc:WorkStealingQueue

代码 #ifndef BTHREAD_WORK_STEALING_QUEUE_H#define BTHREAD_WORK_STEALING_QUEUE_H#include "butil/macros.h"#include "butil/atomicops.h"#include "butil/logging.h"namespace bthread {template <typename T>

学习brpc:echo服务

Echo同步客户端 server 端 #include <gflags/gflags.h>#include <json2pb/pb_to_json.h>#include <brpc/server.h>#include "butil/endpoint.h"#include "echo.pb.h"// flags,用于配置serverDEFINE_bool(echo_attachment

brpc负载均衡load balance和服务发现name servicing

1.SharedLoadBalancer(load_balancer.h):包含LoadBalancer指针_lb,AddServersInBatch 2.LoadBalancerWithNaming:继承SharedLoadBalancer和NamingServiceWatcher 2.1Init函数:SharedLoadBalancer::Init,new一个load balance对象

brpc之InputMessenger

简介 InputMessenger类是客户端处理socket中响应的处理类 类结构 #mermaid-svg-pmitHXejHDdzZmky {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-pmitHXejHDdzZmky .error-icon{fi

brpc: a little source code

之前在https://www.yuque.com/treblez/qksu6c/nqe8ip59cwegl6rk?singleDoc# 《olap/clickhouse-编译器优化与向量化》中我谈过brpc的汇编控制bthread。本文就来看一下brpc作为一个高性能的rpc实现,除了自定义线程栈之外,代码还有什么优秀之处。 因为时间原因,本文不做深入分析,只是解读下几个有意思的模块。 用户态f

【brpc学习实践十三】基于brpc的redis client的实现

brpc支持了redis协议,提供了相关redis访问接口,充分利用了bthread,可以坐到比hiredis更高效。 brpc redis与hiredis的对比 相比使用hiredis(官方client)的优势有: 线程安全。用户不需要为每个线程建立独立的client。支持同步、异步、批量同步、批量异步等访问方式,能使用ParallelChannel等组合访问方式。支持多种连接方式。支持超

【brpc学习实践十三】基于brpc的redis client的实现

brpc支持了redis协议,提供了相关redis访问接口,充分利用了bthread,可以坐到比hiredis更高效。 brpc redis与hiredis的对比 相比使用hiredis(官方client)的优势有: 线程安全。用户不需要为每个线程建立独立的client。支持同步、异步、批量同步、批量异步等访问方式,能使用ParallelChannel等组合访问方式。支持多种连接方式。支持超

【brpc学习实践】ParallelChannel的使用与并行请求

概览 ParallelChannel (有时被称为“pchan”)同时访问其包含的sub channel,并合并它们的结果。用户可通过CallMapper修改请求,通过ResponseMerger合并结果。ParallelChannel看起来就像是一个Channel: 支持同步和异步访问。 发起异步操作后可以立刻删除。 可以取消。 支持超时。 任何brpc::ChannelBas

【brpc学习实践七】dummy server、DynamicPartitionChannel

dummy server 如果你的程序只使用了baidu-rpc的client或根本没有使用baidu-rpc,但你也想使用baidu-rpc的内置服务,只要在程序中启动一个空的server就行了,这种server我们称为dummy server。 Dummy server 可以用于原型设计和开发目的,作为简单的 http 服务器使用,多数场景用不上。 brpc怎么开启dummy server