1. 前言
项目!终于到做项目了!
博主从今年四月开始学习C语言
8个月的高强度学习,一天没歇息过
终于在今天接触到项目了!!!
本篇文章旨在给大家介绍什么是
高并发内存池项目以及为什么要
做这个项目,最后讲做这个项目需要
什么知识储备,内容非常的轻松愉快
大部分内存以文字的方式呈递!
现在我只想说:项目,启动!!!
2. 什么是高并发内存池项目?
首先,它是一个全球性大厂google(谷歌)的
开源项目,项目名字叫tcmalloc,全称是
Thread-Caching Malloc
,即线程缓存的malloc
那它具体是什么?有什么用呢?
我们知道C语言在堆上开辟空间和 释放使用的是malloc和free函数 并且C++的动态内存管理new和delete 的底层实际上也调用了malloc和free 也就是说在所有场景下malloc函数都可以 使用,但是正是因为这种性质导致它在任何 情况下的效率都不太高,所以谷歌才自己做了 一套并发内存池的项目来解决在多线程情况下 malloc效率低下的问题,也就是说这个项目的 目的是在特定情况下代替C语言的malloc和free!
当然!谷歌的开源项目的源码的代码量十分巨大!如果我们要实现一个和它一模一样的内存池,代价太大了!所以我们只把谷歌这个项目的tcmalloc最核心的框架简化后拿出来,模拟实现出一个自己的高并发内存池,目的就是学习tcamlloc的精华,这种方式有点类似我们之前学习STL容器的方式。但是相比STL容器部分,tcmalloc的代码量和复杂度上升了很多,大家要有心理准备。当前另一方面,难度的上升,我们的收获和成长也是在这个过程中同步上升!!
怀着激动的心情,现在来学习什么是内存池?
3. 什么是内存池?
- 什么是池化技术?
我们在学习Linux时学过线程池,
它就是池化技术的体现之一
内存池也就是一种池化技术!
- 什么是内存池?
4. 内存池所解决的问题
内存池主要解决的当然是效率的问题,其次如果作为系统的内存分配器的角度,还需要解决一下内存碎片的问题。那么什么是内存碎片呢?
请看下图:
现在这个程序有256+512=768个byte 的空间,但是此时申请一份600byte的 空间却开不出来,因为B申请的空间把这 768个byte的空间分割开了!!!
5. 为什么选择高并发内存池项目?
- 这个项目非常实用
Go语言直接用它做了自己内存分配器。所以很多程序员是熟悉这个项目的,那么有好处,也有坏处。好处就是把这个项目理解扎实了,会很受面试官的认可。坏处就是面试官可能也比较熟悉项目,对项目会问得比较深,比较细。如果你对项目掌握得不扎实,那么就容易碰钉子
所以如果你准备要做这个项目,那么
一定要做好!做好了会让面试官刮目相看
做的不够熟练只会让面试官觉得你是水货
- 学习最顶尖的思想
Google是超级大厂,并且Google对
C/C++语言的研究一直走在世界的
最前列,也就是说这个项目其实是世界
上的C++顶尖高手写出来的!就像别人
说学Java必看的书或必做的项目一样,
高并发内存池就是C++程序员可以说
是必看的项目!
博主想做这个项目没有别的原因
只因为它是C++顶尖高手写出来的
我也有一颗成为顶尖高手的心,所以
我得去学习他们的思想,就这一个原因
就足够支撑我学习这个项目!!!
6. 需要掌握的技能
做这个项目需要掌握的知识技能:
这个项目会用到C/C++、数据结构(链表、哈希桶)、操作系统内存管理、单例模式、多线程、互斥锁
等等方面的知识。难度的话,如果难度满级的项目是5星的话,这个项目应该是4星.
本篇文章的所有内容到此为止!
各位码友,让我们一起加油,互勉
一起啃下这个硬骨头,冲冲冲!!!
🔎 下期预告:开胃菜:定长内存池 🔍