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

💓博主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星.

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


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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【动态规划】02斐波那契数列模型_三步问题(easy)

题目链接:leetcode三步问题 目录 题目解析: 算法原理: 1.状态表示 2.状态转移方程 3.初始化 4.填表顺序 5.返回值 编写代码: 题目解析: 题目让我们求小孩到达n阶台阶的时候,可以有多少上楼梯方式; 由题可得&a…

作业12.7

1.实现一个登录窗口界面 源文件: #include "mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent) {//设置界面大小,名称与图标this->setFixedSize(1280,720);this->setWindowTitle("泰坦陨落");thi…

Adobe系列软件:创意之旅的得力助手

在数字创意领域,Adobe系列软件一直以其卓越的性能和广泛的应用而备受瞩目。从图像处理、视频编辑到音频编辑,从网页开发到排版设计,这些软件都提供了强大的功能和工具,帮助用户实现他们的创意。 让我们详细介绍这些软件的作用&…

使用python操作excel文档

导入xlsxwriter包 python轻量化的语言,用来操作文档简直易如反掌,首先你需要导入的是import xlsxwriter包,他包括了操作文档所需要的全部工具方法,你只需要调用就好了。 操作excel指南 首先你需要创建一个文件xlsxwriter.Workb…

1.10 C语言之外部变量与作用域

1.10 C语言之外部变量与作用域 一、外部变量概述二、练习 一、外部变量概述 我们说,函数(不管是main函数还是其他函数)内部定义的变量,其作用范围都只在函数内部,我们把这些变量叫做自动变量或者局部变量。除了局部变…

从文字到使用,一文读懂Kafka服务使用

🏆作者简介,普修罗双战士,一直追求不断学习和成长,在技术的道路上持续探索和实践。 🏆多年互联网行业从业经验,历任核心研发工程师,项目技术负责人。 🎉欢迎 👍点赞✍评论…

【UE5】瞬移+马赛克过渡效果

效果 步骤 1. 新建一个工程,创建一个Basic关卡 2. 添加第三人称游戏资源到内容浏览器 3. 新建一个材质,这里命名为“M_Pixel” 打开“M_Pixel”,设置材质域为“后期处理” 在材质图表中添加如下节点 此时效果如下,已经有马赛克的…

Textual Inversion

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

数据结构和算法-栈

数据结构和算法-栈 1. 栈的介绍 栈的介绍: 栈的英文为(stack)栈是一个先入后出的有序列表栈是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶,另一端为固…

2024 年前端技术发展大趋势一览

随着技术的不断演进,前端开发领域也在不断变化和发展。AI、Vue、Web3等都是当前前端开发的新趋势,它们为开发者提供了更多的机会和挑战。今天这篇文章,咱们就来聊一聊,最新前端技术趋势。 1.AI 年初的 ChatGPT 火爆全网&#xff0…

MongoDB的连接数据库,创建、删除数据库,创建、删除集合命令

本文主要介绍MongoDB的连接数据库,创建、删除数据库,创建、删除集合命令。 目录 MongoDB连接数据库连接到本地 MongoDB 实例连接到远程 MongoDB 实例 MongoDB创建和删除数据库MongoDB创建和删除集合创建集合删除集合 MongoDB连接数据库 连接 MongoDB 数…

SuperMap iObject.NET三维场景拖拽框选实现详解及完整源代码(一)——环境准备及项目配置

作者:超图研究院技术支持中心-于丁1 SuperMap iObject.NET三维场景拖拽框选实现详解及完整源代码(一)——环境准备及项目配置   三维场景框选是一种在三维空间中进行选择和操作的功能,它可以让使用者通过鼠标拖动来创建一个矩形…

kafka C++实现消费者

文章目录 1 Kafka 消费者的逻辑2 Kafka 的C API2.1 RdKafka::Conf2.2 RdKafka::Event2.3 RdKafka::EventCb2.4 RdKafka::TopicPartition2.5 RdKafka::RebalanceCb2.6 RdKafka::Message2.7 RdKafka::KafkaConsumer(核心) 3 Kafka 消费者客户端开发3.1 必要…

springboot监听器模式源码精讲

1.前言 很多时候我们看源码的时候看不下去,其中一个原因是系统往往使用了许多设计模式,如果你不清楚这些设计模式,这无疑增加了你阅读源码的难度。 springboot中就大量使用了设计模式,本文主要介绍其中的一种监听器模式&#xf…

谈谈 .NET8 平台中对 LiteDB 的 CRUD 操作

哪个啥!纯 C# 编写的 LiteDB 你还不会操作? LiteDB 简介LiteDB 安装1、同步版 LiteDB2、异步版 LiteDB.Async LiteDB StudioLiteDB CRUD 操作举例1、.net cli 命令创建项目2、项目添加相关 nuget 包3、改造项目结构4、改造项目代码 LiteDB vs SQLite 对比…

泳道图绘制全攻略,一图胜千言,快速上手

泳道图是一种流程图的形式,通过在不同的泳道中展示不同的参与者,帮助我们更好地理解和分析流程。它是一种非常有用的工具,可以帮助我们在团队协作、流程管理和问题解决等方面取得更好的效果。 1. 泳道图的定义 泳道图是一种以泳道为基础的流程…

postgresql从入门到精通 - 第37讲:postgres物理备份和恢复概述

PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。 第37讲&#…

提高工厂能源效率的关键:工厂能耗监测平台

工业做为能源消耗的重要场所,所以节能减排对工业来讲是一个亟需解决的问题。除了对设备进行更新换代外,还需要能源管理消耗监测平台,帮助企业实现节能减排的目标。 工厂能源消费量非常庞大,能源比较难以监测与控制。传统能源的管…

路径规划之RRT算法

系列文章目录 路径规划之Dijkstra算法 路径规划之Best-First Search算法 路径规划之A *算法 路径规划之D *算法 路径规划之PRM算法 路径规划之RRT算法 路径规划之RRT算法 系列文章目录前言一、RRT算法1.起源2.流程3. 优缺点3.1 优点3.2 缺点 4. 实际效果 前言 PRM方法相比于传…

正则表达式(3):入门

正则表达式(3):入门 小结 本博文转载自 从这篇文章开始,我们将介绍怎样在Linux中使用”正则表达式”,如果你想要学习怎样在Linux中使用正则表达式,这些文章就是你所需要的。 在认识”正则表达式”之前&am…