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

news2025/1/11 0:26:20

目录

  • 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 Cache
    void ListTooLong(FreeList &list, size_t size);

private:
    FreeList _freeLists[NFREELIST];
};

// 实现无锁访问 -- TLS
// 通过TLS,每个线程无锁地获取自己专属的ThreadCache对象
static _declspec(thread) ThreadCache *pTLSThreadCache = nullptr;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2112702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

深入理解Kotlin中的异步网络请求处理

在现代移动和Web应用开发中&#xff0c;异步网络请求处理是核心功能之一。Kotlin&#xff0c;作为一种现代、简洁且功能强大的编程语言&#xff0c;提供了多种方式来处理异步任务&#xff0c;使得开发者能够编写出更加高效和响应迅速的应用。本文将深入探讨Kotlin中的异步网络请…

FPGA开发:Verilog数字设计基础

EDA技术 EDA指Electronic Design Automation&#xff0c;翻译为&#xff1a;电子设计自动化&#xff0c;最早发源于美国的影像技术&#xff0c;主要应用于集成电路设计、FPGA应用、IC设计制造、PCB设计上面。 而EDA技术就是指以计算机为工具&#xff0c;设计者在EDA软件平台上…

Python-获取excel数据 - 成绩统计

Pandas库基础操作 pandas库是Python中非常受欢迎的数据分析库&#xff0c;提供了快速、灵活和富有表现力的数据结构&#xff0c;便于轻松地进行数据清洗和分析。因为它不是标准库&#xff0c;使用前确保环境已经安装了Pandas库。 pip install pandas接下来&#xff0c;通过一…

LLM Attention and Rotary Position Embedding(旋转位置编码)

旋转位置编码&#xff08;Rotary Position Embedding&#xff0c;RoPE&#xff09;是一种能够将相对位置信息依赖集成Attention计算里的方法。就是在做词表映射的时候不是单一的进行一个embedding计算&#xff0c;还考虑位置信息。 一些资料 [1] https://arxiv.org/pdf/2104.0…

Ubuntu20.04+ros-noetic配置Cartographer

一、概述 因为要配置激光SLAM&#xff0c;Cartographer属于激光雷达SLAM 中比较经典的一款&#xff0c;在学习之前先将其在Ubuntu20.04首先配置出来并成功运行demo。 二、具体操作 &#xff08;一&#xff09;概述 使用平台是Windows的wsl2上的Ubuntu20.04子系统&#xff0c;…

.NET技巧 - 控制台应用隐藏窗口

.NET技巧 - 控制台应用隐藏窗口 前言 起初我通过C#创建控制台应用程序免杀shellcode加载器时&#xff0c;默认会启动一个cmd控制台窗口 但当我们希望将其免杀loader用于钓鱼时&#xff0c;我们必然不希望出现这种情况。在执行进程迁移、进程注入、进程镂空等持久化权限维持操…

如何在Word中插入表格并进行高级格式化:冒号对齐、添加下划线并分栏

如何在Word中插入表格并进行高级格式化&#xff1a;详细教程 在Word中&#xff0c;表格是一个非常常用的工具&#xff0c;能够帮助我们更好地组织和展示信息。除此之外&#xff0c;本文还将深入探讨如何实现冒号对齐、添加专业的下划线以及隐藏表格线等高级技巧。通过这些技巧…

微信小程序中如何监听元素进入目标元素

Page({onLoad: function(){// 如果目标节点&#xff08;用选择器 .target-class 指定&#xff09;进入显示区域以下 100px 时&#xff0c;就会触发回调函数。wx.createIntersectionObserver().relativeToViewport({bottom: 100}).observe(.target-class, (res) > {res.inter…

NC栈和排序

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站&#xff0c;这篇文章男女通用&#xff0c;看懂了就去分享给你的码吧。 描述 给你一个 1 到…

WGCLOUD 安装和基本使用

WGCLOUD官网下载安装包&#xff1a;www.wgstart.com 1、部署WGCLOUD运行的前置条件说明 WGCLOUD包括&#xff1a;server为服务端&#xff08;或主控端&#xff09;&#xff0c;agent为客户端&#xff08;探针端、被控端&#xff09; WGCLOUD的server和agent&#xff0c;可以部…

LoRA微调基础知识点

LoRA&#xff08;Low-Rank Adaptation&#xff09; LoRA论文地址 LoRA微调模型结构可训参数和配置详解 一般理解就是在模型Linear层的输入增加两个权重矩阵A和B&#xff0c;代替原有参数矩阵W进行训练。 如果训练从左侧进行计算则需要 d d d \times d dd的参数量&#xff…

开篇: 为什么要做这个项目?

背景 最近工作中遇到一个需求需要实现一版在线的Web编辑器&#xff0c;类似 Vue Playground 的效果&#xff0c;但是Vue playground 整体体验下来不是很好&#xff0c;和本地 VSCode 编辑器开发体验差距较大(虽然理解在线编辑器没必要完全照着本地开发体验来)。 经过多方体验调…

Harmony OS DevEco Studio 如何导入第三方库(以lottie为例)?-- HarmonyOS自学2

在做鸿蒙开发时&#xff0c;离不开第三方库的引入 一.有哪些支持的Harmony OS的 第三方库&#xff1f; 第三方库下载地址&#xff1a; 1 tpc_resource: 三方组件资源汇总 2 OpenHarmony三方库中心仓 二. 如何加入到DevEco Studio工程 以 lottie为例 OpenHarmony-TPC/lot…

单链表的定义

一.单链表的定义&#xff1a; 相比于顺序表&#xff0c;单链表不可随机存取&#xff0c;因此单链表中查找数据必须是一个一个找-->查找效率低 二.用代码定义一个单链表&#xff1a; 单链表每一个节点有数据元素和存放该元素的指针&#xff0c;该指针指向下一个节点 GetEle…

[米联客-XILINX-H3_CZ08_7100] FPGA程序设计基础实验连载-37 LVDS信号环路测试

软件版本&#xff1a;VIVADO2021.1 操作系统&#xff1a;WIN10 64bit 硬件平台&#xff1a;适用 XILINX A7/K7/Z7/ZU/KU 系列 FPGA 实验平台&#xff1a;米联客-MLK-H3-CZ08-7100开发板 板卡获取平台&#xff1a;https://milianke.tmall.com/ 登录“米联客”FPGA社区 http…

2024年全国大学生数学建模A题借鉴论文

问题 1&#xff1a; 舞龙队的动态位置与速度计算 1. **螺旋线的几何建模**&#xff1a;根据题目描述&#xff0c;舞龙队沿着等距螺旋线前进。螺旋线的螺距为 55 cm&#xff0c; 需根据极坐标公式确定每节板凳的位置。 - 极坐标螺旋线方程&#xff1a;\( r a b\theta \)&…

算法专题一: 双指针

目录 前言1. 移动零&#xff08;easy&#xff09;2. 复写零&#xff08;easy&#xff09;3. 快乐数&#xff08;medium&#xff09;4. 盛水最多的容器&#xff08;medium&#xff09;5. 有效三角形的个数&#xff08;medium&#xff09;6. 和为 s 的两个数字&#xff08;easy&a…

Linux CentOS 7.9 安装mysql8

1、新建mysql文件夹 数据比较大&#xff0c;所以我在服务器另外挂了一个盘装mysql&#xff0c;和默认安装一个道理&#xff0c;换路径即可 cd ../ //创建文件夹 mkdir mysql //进入mysql文件夹 cd mysql 2、下载mysql8.0安装包并解压、重命名 //下载安装包 wget https://dev…

元宇宙先驱,城市区块链

blockcity 务实元宇宙的先行者,去中心化自治组织开放平台,轻松加入或创建你的DAO组织创新采用Web3和区块链思维,blockcity 真正人人可用,无需下载安装 《福建省元宇宙产业发展行动计划&#xff08;2024 — 2026 年&#xff09;在“促进数字创意产业发展”条目提到&#xff0c;…

ubuntu 20.04 一直卡在登录界面,即使密码正确也无法登录(失败记录)

ubuntu 20.04 一直卡在登录界面&#xff0c;即使密码正确也无法登录 这次是装实体机&#xff0c;一次失败的尝试。。。 名称型号CPUIntel Xeon E5-2673 V3GPURTX 3060 mobile 安装的时候不要选install third-party software for graphics and Wi-fi hardware and additional …