项目部分
1.这个项目是什么?
高并发内存池的原型是谷歌一个开源项目,tcmalloc,而这个项目,就是tcmalloc中最核心的框架和部分拿出来进行模拟。他的作用就是在去代替原型的内存分配函数malloc和free。这个项目涉及的技术有,c++,数据结构(双向链表,哈希桶),操作系统内存管理,多线程,互斥锁,单例模式等方面的技术。
2.这个项目是怎么组成的?
由threadcache,centralcache,和pagecache三部分组成,什么意思呢,当用户使用我们这个项目去申请内存时,进入这个函数后,先去threadcache申请内存,如果不够,再去向第二层centracahhe去申请内存,要是还是不行,就去第三层申请内存,最后把申请到的内存返回给用户。这就是,tcmalloc的大概实现,当然了,很多细节还没展开说。
3.这个项目实现后,效果怎么样?
在项目完成后,拿我们实现的tcmalloc去和原先的malloc对比。
申请固定内存大小时,我创建了4个线程,分别执行10轮操作,每轮n申请释放1万次,也就是一共进行了40万次的申请释放,结果是malloc用了31ms左右,而tcmlloc只用了11ms左右,就是快了3倍。
当我尝试申请不同内存时,同样的,4个线程,执行10轮,1轮1万次,共40万次申请释放操作,这次,malloc的时间用了1023ms,而tcmalloc只用了113ms,倍数来到了10倍,也就是说,理想状况下,在未来的多线程开发环境下申请不同的内存,使用malloc函数如果要用10s才能完成内存的申请和释放,我只要用1s。
4.你在这个项目收获了什么?
调试方面:
一,加深了条件断点理解和使用,还可以设置具体断点条件让它停下来
二:学会了使用查看函数栈帧,当在断点处停下,当前函数没问题,就可以调用函数堆栈去看看调用这个函数的函数有没有问题。(蛮实用的)
三:疑似死循环的处理
当我们设置了断点,但它迟迟没有到达断点处,程序也没有崩溃,就可能进入死循环了,这时候全部中断,程序就会停在死循环的部分。
对操作系统内存管理的理解:
以前认为申请内存就是简单从内存里哇一块过来就行,实现了这个项目后,才发现,申请内存的时候可能有多层内存池,这个没有空间,再逐步往后申请,再比如,申请不同内存块,再造成的内存碎片问题啊等等
对c++语法和数据结构更加熟悉,项目是c++,虽然代码不是很多,但都是精华,涉及了很多语法的使用,比如智能指针,强制转换