| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> 项目--高并发内存池 -> 正文阅读 |
|
[Java知识库]项目--高并发内存池 |
学习C++也有不少时日了,今天我们来学习一个项目,该项目是借鉴谷歌的tc-malloc,让我们一起来认识一下这个设计极其优秀的项目吧 需求分析我们该项目利用了设计模式中的池化技术,在传统的内存池上进行了优化,该内存池可以有效地提高内存申请效率以及解决内存碎片化的问题 普通内存池的优缺点我们先来回顾一下内存池的主要思路,就是预先开辟一大块内存,当我们程序需要使用内存时,直接从该大块内存中拿取一块,可以提高申请释放效率,而不需要再去new/malloc从堆中申请内存 优点:提高效率,解决部分内存碎片问题 缺点:无法处理高并发时申请内存存在的锁竞争问题,该问题会使效率降低 我们的内存池解决的问题就是上面这些问题 主要设计思路高并发内存池整体框架由以下三部分组成,各部分的功能如下:
那么我们就从0开始对这个项目进行实现吧 thread cache线程缓存首先,我们思考一下,我们的这个内存池最主要的目的是什么?就是可以同时分配内存给不同的线程,基于这一点,参考我们内存池的设计,我们设计了一个成员是自由双向链表的哈希桶作为thread_cache的主要结构 ?
那么我们就需要对双向链表进行基础实现 FreeList类我们既然是挂在哈希桶上,要用这个链表来对内存块进行存储,所以我们结点需要1.头结点指针。2.哈希桶下结点个数。
我们想到,当我们一个线程需要内存时,我们将对应大小的内存返回给线程,所以我们诞生了
我们在这里需要对NextObj(_head)进行说明,这个函数其实是代替链表的next而生的,下面是他的具体实现
有了将内存传给线程,那么就会有线程将用完的内存还给内存池,随意我们的链表还有插入操作
以及一些基本的函数
? ? ? ? ? ? ? ?
? ? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 12:50:43- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |