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

高并发内存池介绍

一、池化技术

所谓 池化技术 ,就是程序先向系统申请过量的资源,然后自己管理,以备不时之需。之所以要申
请过量的资源,是因为每次申请该资源都有较大的开销,不如提前申请好了,这样使用时就会变得非常快捷,大大提高程序运行效率。
在计算机中,有很多使用 这种技术的地方,除了内存池,还有连接池、线程池、对象池等。以服务器上的线程池为例,它的主要思想是:先启动若干数量的线程,让它们处于睡眠状态,当接收到客户端的请求时,唤醒池中某个睡眠的线程,让它来处理客户端的请求,当处理完这个请求,线程又进入睡眠状态。

二、项目原型

原型是 Google 开源的一个 tcmalloc 项目,全称 thread cache malloc,即线程缓存 malloc,实现了高效的多线程内存管理,也就是说对比 malloc,在单线程情况下可能不会有大差别,但是多线程情况下就比 malloc 跟高效。

三、高并发内存池三个模块

高并发内存池主要关心三个问题:性能问题,多线程环境下锁竞争问题,内存碎片问题。

对于三个问题就有三个模块来解决:

1、线程缓存 thread cache

每一个线程独有,用于256KB以内的内存分配,由于每个线程都有一个 thread cache,所以申请时不用加锁,这也是高效之处。

2、中心缓存 cenctral cache

若 thread cache 中内存不够,会到中心缓存申请内存。

机制:

(1)多线程均衡调度内存,适当减少大线程缓存内存补足小线程缓存内存

(2)虽然存在锁竞争,但是由于本质是哈希桶,要满足同时有两个线程没有内存并且向同一个桶要内存才会发生线程安全问题。所以竞争并不激烈。

3、页缓存 page cache

页缓存的存储单位是页(4KB),中心缓存内存不够了就去找页缓存,页缓存也会回收中心缓存释放的页,页号连续的就会合并,缓解内存碎片问题。

4、模块关系图


http://www.mrgr.cn/news/69552.html

相关文章:

  • SpringCloud学习笔记
  • 比ChatGPT更酷的AI工具
  • 对node工程进行压力测试与性能分析
  • gitlab角色、权限
  • 【C语言刷力扣】13.罗马数字转整数
  • opencv常用api
  • 【JAVA项目】基于jspm的【医院病历管理系统】
  • 基于java+SpringBoot+Vue的课程答疑系统设计与实现
  • openpyxl处理Excel模板,带格式拷贝行和数据填入
  • fpga开发原理图设计仿真分析
  • JavaWeb——Web入门(7/9)-Tomcat-介绍(Tomcat 的简介:轻量级Web服务器,支持Servlet/JSP少量JavaEE规范)
  • 互联网及其应用大作业要求-计算机实践课程题目要求
  • Python软体中使用Seaborn绘制热力图的实用指南
  • .Net相关知识
  • C++ | Leetcode C++题解之第554题砖墙
  • PostgreSQL 窗口函数
  • 所谓的ELK到底是啥
  • O-RAN简介
  • 【分布式】分布式锁设计与Redisson源码解析
  • [241110] 微软发布多智能体系统Magentic-One | 社区讨论:Ubuntu 26.04 LTS 发布前移除 Qt 5
  • 基于Python的自然语言处理系列(58):多模态检索生成问答(RAG)
  • 【51单片机4位数码管左右移位显示0-9不用数组】2022-4-19
  • 深入理解JVM
  • 第一个 FastAPI 应用
  • centos7的maven配置
  • 【R78/G15 开发板测评】串口打印 DHT11 温湿度传感器、DS18B20 温度传感器数据,LabVIEW 上位机绘制演化曲线