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

2024-09-07 10:44

本文主要是介绍[项目][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;

这篇关于[项目][CMP][Thread Cache]详细讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

Springboot项目启动失败提示找不到dao类的解决

《Springboot项目启动失败提示找不到dao类的解决》SpringBoot启动失败,因ProductServiceImpl未正确注入ProductDao,原因:Dao未注册为Bean,解决:在启... 目录错误描述原因解决方法总结***************************APPLICA编

Apache Ignite 与 Spring Boot 集成详细指南

《ApacheIgnite与SpringBoot集成详细指南》ApacheIgnite官方指南详解如何通过SpringBootStarter扩展实现自动配置,支持厚/轻客户端模式,简化Ign... 目录 一、背景:为什么需要这个集成? 二、两种集成方式(对应两种客户端模型) 三、方式一:自动配置 Thick

Python对接支付宝支付之使用AliPay实现的详细操作指南

《Python对接支付宝支付之使用AliPay实现的详细操作指南》支付宝没有提供PythonSDK,但是强大的github就有提供python-alipay-sdk,封装里很多复杂操作,使用这个我们就... 目录一、引言二、准备工作2.1 支付宝开放平台入驻与应用创建2.2 密钥生成与配置2.3 安装ali

Java Thread中join方法使用举例详解

《JavaThread中join方法使用举例详解》JavaThread中join()方法主要是让调用改方法的thread完成run方法里面的东西后,在执行join()方法后面的代码,这篇文章主要介绍... 目录前言1.join()方法的定义和作用2.join()方法的三个重载版本3.join()方法的工作原

2025版mysql8.0.41 winx64 手动安装详细教程

《2025版mysql8.0.41winx64手动安装详细教程》本文指导Windows系统下MySQL安装配置,包含解压、设置环境变量、my.ini配置、初始化密码获取、服务安装与手动启动等步骤,... 目录一、下载安装包二、配置环境变量三、安装配置四、启动 mysql 服务,修改密码一、下载安装包安装地

RabbitMQ消费端单线程与多线程案例讲解

《RabbitMQ消费端单线程与多线程案例讲解》文章解析RabbitMQ消费端单线程与多线程处理机制,说明concurrency控制消费者数量,max-concurrency控制最大线程数,prefe... 目录 一、基础概念详细解释:举个例子:✅ 单消费者 + 单线程消费❌ 单消费者 + 多线程消费❌ 多

在macOS上安装jenv管理JDK版本的详细步骤

《在macOS上安装jenv管理JDK版本的详细步骤》jEnv是一个命令行工具,正如它的官网所宣称的那样,它是来让你忘记怎么配置JAVA_HOME环境变量的神队友,:本文主要介绍在macOS上安装... 目录前言安装 jenv添加 JDK 版本到 jenv切换 JDK 版本总结前言China编程在开发 Java

Spring Boot Actuator应用监控与管理的详细步骤

《SpringBootActuator应用监控与管理的详细步骤》SpringBootActuator是SpringBoot的监控工具,提供健康检查、性能指标、日志管理等核心功能,支持自定义和扩展端... 目录一、 Spring Boot Actuator 概述二、 集成 Spring Boot Actuat

如何在Java Spring实现异步执行(详细篇)

《如何在JavaSpring实现异步执行(详细篇)》Spring框架通过@Async、Executor等实现异步执行,提升系统性能与响应速度,支持自定义线程池管理并发,本文给大家介绍如何在Sprin... 目录前言1. 使用 @Async 实现异步执行1.1 启用异步执行支持1.2 创建异步方法1.3 调用