当前位置: 首页 > news >正文

[项目][CMP][Thread Cache]详细讲解

目录

  • 1.设计&结构
  • 2.申请内存
  • 3.释放内存
  • 4.框架


1.设计&结构

  • Thread Cache是哈希桶结构,每个桶是一个按桶位置映射大小的内存块对象的自由链表

  • 每个线程都会有一个Thread Cache对象,这样每个线程在这里获取对象和释放对象时是无锁的
    请添加图片描述

  • TLS – Thread Local Strorage

    • Linux gcc下TLS
    • Windows vs下TLS

2.申请内存

  • 当内存申请size<=256KB,先获取到线程本地存储的Thread Cache对象,计算size映射到哈希桶自由链表下标i
  • 如果自由链表_freeLists[i]中有对象,则直接Pop一个内存对象返回
  • 如果_freeLists[i]中没有对象时,则批量从Central Cache中获取一定数量的对象,插入到自由链表并返回一个对象

3.释放内存

  • 当释放内存小于256k时将内存释放回Thread Cache,计算size映射自由链表桶位置i,将对象Push 到_freeLists[i]
  • 当链表的长度过长,则回收一部分内存对象到central cache

4.框架

class ThreadCache
{
public:// 申请和释放内存/对象void *Allocate(size_t size);void Deallocate(void *ptr, size_t size);// 从CentralCache获取内存/对象void *FetchFromCentralCache(size_t index, size_t alignSize);// 释放对象时,链表过长,回收内存回到Central Cachevoid ListTooLong(FreeList &list, size_t size);private:FreeList _freeLists[NFREELIST];
};// 实现无锁访问 -- TLS
// 通过TLS,每个线程无锁地获取自己专属的ThreadCache对象
static _declspec(thread) ThreadCache *pTLSThreadCache = nullptr;

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 无线信道中ph和ph^2的场景
  • JVM——Java虚拟机内存初识(面经篇之JVM内存)
  • 240414 类和对象
  • rancher搭建k8s及jenkins自动化部署
  • 【nginx】
  • Python中的装饰器及其应用场景
  • chrome 插件开发入门
  • C语言-第六章-加餐:其他自定义类型
  • C语言第一周课
  • 用RPC Performance Inspector 优化你的区块链
  • java设计模式day02--(创建型模式:工厂模式、原型模式、建造者模式)
  • 【AIGC半月报】AIGC大模型启元:2024.09(上)
  • 探究零工市场小程序如何改变传统兼职模式
  • vscode安装使用plantuml插件
  • 集成电路学习:什么是SDK软件开发工具包
  • 【面试系列】之二:关于js原型
  • Fundebug计费标准解释:事件数是如何定义的?
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JAVA之继承和多态
  • JSONP原理
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • RedisSerializer之JdkSerializationRedisSerializer分析
  • select2 取值 遍历 设置默认值
  • SpringBoot几种定时任务的实现方式
  • underscore源码剖析之整体架构
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  •  一套莫尔斯电报听写、翻译系统
  • 赢得Docker挑战最佳实践
  • 优化 Vue 项目编译文件大小
  • 2017年360最后一道编程题
  • ​14:00面试,14:06就出来了,问的问题有点变态。。。
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)spring boot网络空间安全实验教学示范中心网站 毕业设计 111454
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (回溯) LeetCode 77. 组合
  • (六)DockerCompose安装与配置
  • (三维重建学习)已有位姿放入colmap和3D Gaussian Splatting训练
  • (原)本想说脏话,奈何已放下
  • (轉貼) VS2005 快捷键 (初級) (.NET) (Visual Studio)
  • .equal()和==的区别 怎样判断字符串为空问题: Illegal invoke-super to void nio.file.AccessDeniedException
  • .form文件_SSM框架文件上传篇
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .Net CF下精确的计时器
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • 。。。。。
  • :=
  • [2013AAA]On a fractional nonlinear hyperbolic equation arising from relative theory
  • [ACTF2020 新生赛]Include
  • [Angular] 笔记 16:模板驱动表单 - 选择框与选项
  • [BZOJ 1032][JSOI2007]祖码Zuma(区间Dp)
  • [C# 开发技巧]实现属于自己的截图工具