001 高并发内存池_项目简介

news2024/9/30 15:36:00

​🌈个人主页:Fan_558
🔥 系列专栏:高并发内存池
🌹关注我💪🏻带你学更多知识
来自必应

文章目录

  • 前言
    • 一、项目简介
    • 二、所需知识储备与难度
    • 三、什么是内存池
    • 四、内存池主要解决的问题
  • 小结

前言

话不多说,项目启动

一、项目简介

当前项目是实现一个高并发的内存池,他的原型是google的一个开源项目tcmalloc,tcmalloc全称 Thread-Caching Malloc,即线程缓存的malloc,实现了高效的多线程内存管理,用于替代系统的内存分配相关的函数(malloc、free)。
在这里插入图片描述
这个项目是把tcmalloc最核心的框架简化后拿出来,模拟实现出一个自己的高并发内存池,目的就是学习tcamlloc的精华,这种方式有点类似之前学习STL容器的方式。但是相比STL容器部分, tcmalloc的代码量和复杂度上升了很多,大家要有心理准备。当前另一方面,难度的上升,我们的收获和成长也是在这个过程中同步上升。
另一方面tcmalloc是全球大厂google开源的,可以认为当时顶尖的C++高手写出来的,他的知名度也是非常高的,不少公司都在用它,Go语言直接用它做了自己内存分配器。所以很多程序员是熟悉这个项目的,那么有好处,也有坏处。好处就是把这个项目理解扎实了,会很受面试官的认可。坏处就是面试官可能也比较熟悉项目,对项目会问得比较深,比较细。如果你对项目掌握得不扎实,那么就容易碰钉子。

二、所需知识储备与难度

这个项目会用到C/C++、数据结构(链表、哈希桶)、操作系统内存管理、单例模式、多线程、互斥锁等等方面的知识。
虽然这个项目没有涉及到网络,但是把这个项目掌握好,找到一份工作是够用的

如果说平常项目是*****五星级别,那么这个项目就是****四星级别

三、什么是内存池

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

内存池是指程序预先从操作系统申请一块足够大内存,此后,当程序中需要申请内存的时候,不是直接向操作系统申请,而是直接从内存池中获取;同理,当程序释放内存的时候,并不真正将内存返回给操作系统,而是返回内存池。当程序退出(或者特定时间)时,内存池才将之前申请的内存真正释放。

四、内存池主要解决的问题

内存池主要解决的当然是效率的问题,在高并发场景下,频繁地申请和释放内存可能会导致内存碎片化、内存分配效率低下、频繁的内存分配释放操作可能会增加系统开销等问题。通过使用高并发内存池,可以提前申请一定数量的内存块并进行管理,避免频繁的内存分配和释放操作,从而提高内存分配效率、降低内存碎片化的风险,减少系统开销,提升系统的性能和稳定性。其次如果作为系统的内存分配器的角度,还需要解决一下内存碎片的问题。那么什么是内存碎片呢?

在这里插入图片描述

再需要补充说明的是内存碎片分为外碎片和内碎片,上面我们讲的外碎片问题。外部碎片是一些空闲的连续内存区域太小,这些内存空间不连续,以至于合计的内存足够,但是不能满足一些的内存分配申请需求。内部碎片是由于一些对齐的需求,导致分配出去的空间中一些内存无法被利用。

小结

好啦,项目简介就到这里啦,欲知后事如何,且听下回分解。

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

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

相关文章

MySQL中的数据备份

1. 逻辑备份 备份的是建表、建库、插入等操作所执行SQL语句,适用于中小型数据库,效率相对较低。 本质:导出的是SQL语句文件 优点:不论是什么存储引擎,都可以用mysqldump备成SQL语句 缺点:速度较慢&…

centos7 linux下yum安装redis

安装redis 检查是否有redis yum 源 yum install redis下载fedora的epel仓库 yum install epel-release安装redis数据库 yum install redis安装完毕后,使用下面的命令启动redis服务 # 启动redis service redis start# 停止redis service redis stop# 查看redis运…

隐私计算实训营学习三:隐私计算框架的架构和技术要点

文章目录 一、隐语架构二、产品层三、算法层3.1 PSI与PIR3.2 Data Analysis-SCQL3.3 Federated Learning 四、计算层4.1 混合调度编译-RayFed4.2 密态引擎4.3 密码原语YACL 五、资源管理层六、互联互通七、跨域管控 一、隐语架构 1、完备性:支持多种技术&#xff0…

谷粒商城 - 前端基础

1.前端技术栈 2.ES6 2.1简介 2.2 let 与 const <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Doc…

yolov8目标检测数据集制作——make sense

背景 在前几天我进行了录制视频以准备足够多的数据集&#xff0c;同时使用利用python自定义间隔帧数获取视频转存为图片&#xff0c;所以今天我准备对我要训练的数据集进行标注。我要做的是一个基于yolo的检测项目&#xff0c;在搜索资料后得知大家多是用labelme或者make sens…

Redis如何删除大key

参考阿里云Redis规范 查找大key&#xff1a; redis-cli --bigkeys 1、String类型&#xff1a; Redis 4.0及以后版本提供了UNLINK命令&#xff0c;该命令与DEL命令类似&#xff0c;但它会在后台异步删除key&#xff0c;不会阻塞当前客户端&#xff0c;也不会阻塞Redis服务器的…

K8S--SpringCloud应用整合Nacos实战

原文网址&#xff1a;K8S--SpringCloud应用整合Nacos实战-CSDN博客 简介 本文介绍K8S部署SpringCloud应用整合Nacos实战。 本文是将原来的SpringCloud项目&#xff08;闪速优选&#xff09;迁移到K8S上&#xff0c;一行代码都不需要改动。用K8S运行Nacos、Gateway、SpringCl…

音乐制作利器FL Studio21.2.2中文版编曲软件助你成为音乐大师!

FL Studio 21.2.2中文版是一款功能强大的音乐制作软件&#xff0c;也被称为“水果编曲”。它为用户提供了全面的音乐制作工具和功能&#xff0c;支持多轨道音频录制、音序处理、混音和音频编辑等&#xff0c;帮助用户实现高质量的音乐制作。 此外&#xff0c;FL Studio 21.2.2…

Java基础-常用类

文章目录 1.Math类2.System类1.exit代码 结果2.arraycopy参数解释代码结果 3.currentTimeMillens代码结果 3.大数处理方案基本介绍BigInteger类介绍代码结果 BigDecimal类介绍代码结果 4.日期类对于IDEA类图中的属性![image-20240101190844530](https://img-blog.csdnimg.cn/im…

学习 考证 帆软 FCP-FineBI V6.0 考试经验

学习背景&#xff1a; 自2024年1月起&#xff0c;大部分时间就在家里度过了&#xff0c;想着还是需要充实一下自己&#xff0c;我是一个充满热情的个体。由于之前公司也和帆软结缘&#xff0c;无论是 Fine-Report 和 Fine-BI 都有接触3年之久&#xff0c;但是主要做为管理者并…

使用Python进行自动化测试Selenium与PyTest的结合【第150篇—自动化测试】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 使用Python进行自动化测试&#xff1a;Selenium与PyTest的结合 在软件开发中&#xff0c;自…

Linux 常用命令 1

Tips&#xff1a;终端热键ctrl shift 放大终端窗口的字体 ctrl - 缩小终端窗口的字体 注意区分大小写 查阅命令帮助信息&#xff1a; 1&#xff09;--help command –help(两个减号) 显示command命令的帮助信息 2&#xff09;man man command 查阅command命令的使…

java数据结构与算法刷题-----LeetCode75. 颜色分类

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 双指针两次遍历2. 三指针 1. 双指针两次遍历 解题思路&#…

linux下线程分离属性

linux下线程分离属性 一、线程的属性---分离属性二、线程属性设置2.1 线程创建前设置分离属性2.2 线程创建后设置分离属性 一、线程的属性—分离属性 什么是分离属性&#xff1f; 首先分离属性是线程的一个属性&#xff0c;有了分离属性的线程&#xff0c;不需要别的线程去接合…

YOLOv8 | 网络结构 | 详细讲解YOLOv8的网络结构

⭐欢迎大家订阅我的专栏一起学习⭐ 🚀🚀🚀订阅专栏,更新及时查看不迷路🚀🚀🚀 YOLOv5涨点专栏:http://t.csdnimg.cn/70xZa YOLOv8涨点专栏:http://t.csdnimg.cn/Cb89a YOLOv7专栏:http://t.csdnimg.cn/HaTdn 💡魔改网络、复现论文、优化创新💡 …

风靡全球的WEB3街头时尚品牌Hape正式启动2024年回到街头系列活动

什么是「街头」 是永不畏惧的竞技精神 是肆意生长的野性力量 是色彩绮丽的感官世界 3月23日&#xff01; 跟随Hape的节奏&#xff0c;领略最原始纯粹的街头文化&#xff0c;在Yolo Block找到属于你的街头时尚 「回到街头」活动信息 时间 3月23日 - 4月14日 地点 福建省…

【数据结构初阶】之堆(C语言实现)

数据结构初阶之堆&#xff08;C语言实现&#xff09; &#x1f30f; 堆的概念&#x1f30f; 堆的模拟实现&#x1f413; 堆的结构和方法接口&#x1f413; 堆的方法的模拟实现&#x1f64a; 堆的初始化&#x1f64a; 堆的构建&#x1f64a; 堆的插入&#x1f64a; 向上调整&…

仿牛客社区项目所有PPT图片

文章目录 第1章 初识Spring Boot&#xff0c;开发社区首页1.1 课程介绍1.1.1 课程目标1.1.2 技术架构1.1.3 开发环境 1.2 搭建开发环境1.2.1 Apache Maven1.2.2 Intellij IDEA1.2.3 Spring Initializer1.2.4 SpringBoot 入门示例 1.3 Spring入门1.3.1 SpringBoot 全家桶1.3.2 S…

RecyclerView notifyItemRemoved 之后的源码分析

源码版本&#xff1a;androidx1.3.2 分析场景&#xff1a; RecyclerView使用线性布局&#xff0c;方向为竖直方向&#xff0c;布局从上到下&#xff0c;宽高都是 MATCH_PARENT。开始有3条数据。然后移除 position 1 的数据。 流程图 先说下结论&#xff1a; 在 dispatchL…

MySQL | 用户管理

目前为止&#xff0c;我们一直使用的是root权限写的SQL语句。但如果我们只能用root&#xff0c;这样存在安全隐患。而MySQL是给我们提供了用户管理的&#xff0c;可以创建用户&#xff0c;提供权限&#xff0c;收回权限。 1. 用户 MySQL中的用户&#xff0c;都存储在系统数据库…