【项目日记(一)】高并发内存池项目介绍

💓博主CSDN主页:杭电码农-NEO💓

⏩专栏分类:项目日记-高并发内存池⏪

🚚代码仓库:NEO的学习日记🚚

🌹关注我🫵带你学习C++
  🔝🔝


在这里插入图片描述


项目日记

  • 1. 前言
  • 2. 什么是高并发内存池项目?
  • 3. 什么是内存池?
  • 4. 内存池所解决的问题
  • 5. 为什么选择高并发内存池项目?
  • 6. 需要掌握的技能

1. 前言

项目!终于到做项目了!
博主从今年四月开始学习C语言
8个月的高强度学习,一天没歇息过
终于在今天接触到项目了!!!

本篇文章旨在给大家介绍什么是
高并发内存池项目以及为什么要
做这个项目,最后讲做这个项目需要
什么知识储备,内容非常的轻松愉快
大部分内存以文字的方式呈递!

现在我只想说:项目,启动!!!

在这里插入图片描述


2. 什么是高并发内存池项目?

首先,它是一个全球性大厂google(谷歌)的
开源项目,项目名字叫tcmalloc,全称是
Thread-Caching Malloc,即线程缓存的malloc

那它具体是什么?有什么用呢?

我们知道C语言在堆上开辟空间和
释放使用的是malloc和free函数
并且C++的动态内存管理newdelete
的底层实际上也调用了malloc和free
也就是说在所有场景下malloc函数都可以
使用,但是正是因为这种性质导致它在任何
情况下的效率都不太高,所以谷歌才自己做了
一套并发内存池的项目来解决在多线程情况下
malloc效率低下的问题,也就是说这个项目的
目的是在特定情况下代替C语言的malloc和free!

当然!谷歌的开源项目的源码的代码量十分巨大!如果我们要实现一个和它一模一样的内存池,代价太大了!所以我们只把谷歌这个项目的tcmalloc最核心的框架简化后拿出来,模拟实现出一个自己的高并发内存池,目的就是学习tcamlloc的精华,这种方式有点类似我们之前学习STL容器的方式。但是相比STL容器部分,tcmalloc的代码量和复杂度上升了很多,大家要有心理准备。当前另一方面,难度的上升,我们的收获和成长也是在这个过程中同步上升!!

怀着激动的心情,现在来学习什么是内存池?


3. 什么是内存池?

  1. 什么是池化技术?

我们在学习Linux时学过线程池,
它就是池化技术的体现之一

在这里插入图片描述
内存池也就是一种池化技术!

  1. 什么是内存池?

在这里插入图片描述


4. 内存池所解决的问题

内存池主要解决的当然是效率的问题,其次如果作为系统的内存分配器的角度,还需要解决一下内存碎片的问题。那么什么是内存碎片呢?

请看下图:

在这里插入图片描述

现在这个程序有256+512=768个byte
的空间,但是此时申请一份600byte的
空间却开不出来,因为B申请的空间把这
768个byte的空间分割开了!!!

在这里插入图片描述


5. 为什么选择高并发内存池项目?

  1. 这个项目非常实用

Go语言直接用它做了自己内存分配器。所以很多程序员是熟悉这个项目的,那么有好处,也有坏处。好处就是把这个项目理解扎实了,会很受面试官的认可。坏处就是面试官可能也比较熟悉项目,对项目会问得比较深,比较细。如果你对项目掌握得不扎实,那么就容易碰钉子

所以如果你准备要做这个项目,那么
一定要做好!做好了会让面试官刮目相看
做的不够熟练只会让面试官觉得你是水货

  1. 学习最顶尖的思想

Google是超级大厂,并且Google对
C/C++语言的研究一直走在世界的
最前列,也就是说这个项目其实是世界
上的C++顶尖高手写出来的!就像别人
说学Java必看的书或必做的项目一样,
高并发内存池就是C++程序员可以说
是必看的项目!

博主想做这个项目没有别的原因
只因为它是C++顶尖高手写出来的
我也有一颗成为顶尖高手的心,所以
我得去学习他们的思想,就这一个原因
就足够支撑我学习这个项目!!!


6. 需要掌握的技能

做这个项目需要掌握的知识技能:

这个项目会用到C/C++、数据结构(链表、哈希桶)、操作系统内存管理、单例模式、多线程、互斥锁
等等方面的知识。难度的话,如果难度满级的项目是5星的话,这个项目应该是4星.

本篇文章的所有内容到此为止!
各位码友,让我们一起加油,互勉
一起啃下这个硬骨头,冲冲冲!!!


🔎 下期预告:开胃菜:定长内存池 🔍

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Textual Inversion

参考博客1:https://www.bilibili.com/read/cv25430752/

移动云荣获OpenInfra社区“算力基础设施技术突破奖”

近日,一年一度的 OpenInfra Days China在北京召开,大会汇聚了全球各大云厂商的技术专家,共同分享全球前沿基础设施技术的展望和实践经验。在本次大会上,移动云荣获OpenInfra社区颁发的“算力基础设施技术突破奖”,表明…

基于ssm实验室课程管理系统源码和论文

idea 数据库mysql5.7 数据库链接工具:navcat,小海豚等 环境: jdk8 tomcat8.5 摘 要 随着科学实验规模的不断扩大,实验室课程数量的急剧增加,有关实验室课程的各种信息量也在不断成倍增长。面对庞大的信息量,就需要有…

ChatGPT 应用开发(一)ChatGPT OpenAI API 免代理调用方式(通过 Cloudflare 的 AI Gateway)

前言 开发 ChatGPT 应用,我觉得最前置的点就是能使用 ChatGPT API 接口。首先我自己要能成功访问,这没问题,会魔法就可以本地调用。 那用户如何调用到我的应用 API 呢,我的理解是通过用户能访问到的中转服务器向 OpenAI 发起访问…

基于SSM实现的公文管理系统

一、技术架构 前端:jsp | jquery | bootstrap 后端:spring | springmvc | mybatis 环境:jdk1.8 | mysql | maven 二、代码及数据库 三、功能介绍 01. 登录页 02. 首页 03. 系统管理-角色管理 04. 系统管理-功能管理 05. 系统管理-用…

猫咪瘦弱的原因是什么?适合给消瘦猫咪长肉吃的猫罐头分享

很多小猫咪吃得很多,但是还是很瘦,这让很多猫主人感到困惑,猫咪瘦弱的原因是什么呢?铲屎那么多年,还是有点子养猫知识在身上的。那么,小猫咪瘦弱的原因是什么呢?让我们看看是不是这些原因导致的…

详细解读电力DLT698.45-2017通信规约--正向有功总电能

建立连接请看这篇:详细解读DLT698.45-2017通信规约--预连接响应http://mp.weixin.qq.com/s?__bizMzA3NjAwMjQzMQ&mid2652026396&idx1&sna0a17f005d23136c922a7c381ddb7e75&chksm8481f30cb3f67a1a94e66db77e61fe73c22b1904fcdbb0144108e132b265e7b4…

黑苹果之显卡篇

一、什么是显卡 显卡GPU(Video card、Display card、Graphics card、Video adapter)是个人计算机基础的组成部分之一,将计算机系统需要的显示信息进行转换驱动显示器,并向显示器提供逐行或隔行扫描信号,控制显示器的正…

springboot 在自定义注解中注入bean,解决注入bean为null的问题

问题: 在我们开发过程中总会遇到比如在某些场合中需要使用service或者mapper等读取数据库,或者某些自动注入bean失效的情况 解决方法: 1.在构造方法中通过工具类获取需要的bean 工具类代码: import org.springframework.beans…

华为OD机试 - 攀登者1(Java JS Python C)

题目描述 攀登者喜欢寻找各种地图,并且尝试攀登到最高的山峰。 地图表示为一维数组,数组的索引代表水平位置,数组的元素代表相对海拔高度。其中数组元素0代表地面。 例如:[0,1,2,4,3,1,0,0,1,2,3,1,2,1,0],代表如下图所示的地图,地图中有两个山脉位置分别为 1,2,3,4,5…

数字人知识库:Awesome-Talking-Head-Synthesis

数字人知识库:Awesome-Talking-Head-Synthesis 文章目录 数字人知识库:Awesome-Talking-Head-SynthesisDatasetsSurveyAudio-drivenText-drivenNeRF & 3DMetricsTools & SoftwareSlides & Presentations Gihub:https://github.co…

【Python源码保护】02 - pyc

1. python编译过程 Python虽然是一门解释型语言,但Python程序执行时,也需要将源码进行编译生成字节码,然后由Python虚拟机进行执行,因此Python解释器实际是由两部分组成:编译器和虚拟机。 Python程序执行过程和Java类…