内存池和tcmalloc的性能比较

简介:

这次使用的内存池是原公司的,利用hash_map做的,大概的接口是这样:


template <class CObject>
class ObjectPool
{ <br>public:<br>    typedef hash_map<int64_t,ObjectBlock*> BlockMap;
    virtual int pop(CObject *&ob);
    virtual int push(const CObject *ob);<br>private:<br>    BlockMap _block_map;
};

写测试代码比较了一下内存池和tcmalloc的差距!结果挺让人吃惊!


#define MAX_SIZE 50000
 
 
struct MsgToPut
{
     UINT _wr_ptr;
     UINT _rd_ptr;
     UINT _length;
     CHAR _base[1024];
 
     void reset()
     {
         this->_rd_ptr = this->_wr_ptr = 0;
         this->_length = 1024;
     }
};
 
ObjectPool<MsgToPut> MsgPool;
 
void* newthread(void* argv)
{
    long long int start = get_os_system_time();
 
    for(int i=0;i<MAX_SIZE;i++)
    {
        MsgToPut* msg;
        MsgPool.pop(msg);
        if(msg == NULL)
        {
            printf("error\n");
        }
    }
 
    long long int end = get_os_system_time();
 
    printf("newthread ObjectPool:%d\n",end - start);
 
 
    MsgToPut* mtp[MAX_SIZE];
 
    for(int i=0;i<MAX_SIZE;i++)
    {
        mtp[i] = (MsgToPut*)tc_malloc(sizeof(MsgToPut));
        mtp[i]->reset();
    }
 
    start = get_os_system_time();
    printf("newthread tc malloc :%d\n",start - end);
 
    return (void*)0;
}
 
int main()
{
 
    pthread_t pid;
    pthread_create(&pid,NULL,newthread,NULL);
    pthread_create(&pid,NULL,newthread,NULL);
    pthread_create(&pid,NULL,newthread,NULL);
 
    long long int start = get_os_system_time();
 
    for(int i=0;i<MAX_SIZE;i++)
    {
        MsgToPut* msg = NULL;
        MsgPool.pop(msg);
        if(msg == NULL)
        {
            printf("error\n");
        }
    }
 
    long long int end = get_os_system_time();
 
    printf("main ObjectPool:%d\n",end - start);
 
 
    MsgToPut* mtp[MAX_SIZE];
 
    for(int i=0;i<MAX_SIZE;i++)
    {
        mtp[i] = (MsgToPut*)tc_malloc(sizeof(MsgToPut));
        mtp[i]->reset();
    }
 
    start = get_os_system_time();
    printf("main tc malloc :%d\n",start - end);
 
    return 0;
}

普遍打印数据为:

newthread ObjectPool:189
newthread ObjectPool:202
newthread tc malloc :24
newthread tc malloc :20
main ObjectPool:235
newthread ObjectPool:235
main tc malloc :21
newthread tc malloc :22


相关文章
|
1月前
|
存储 缓存 监控
|
3月前
|
Kubernetes Cloud Native Java
云原生之旅:从容器到微服务的演进之路Java 内存管理:垃圾收集器与性能调优
【8月更文挑战第30天】在数字化时代的浪潮中,企业如何乘风破浪?云原生技术提供了一个强有力的桨。本文将带你从容器技术的基石出发,探索微服务架构的奥秘,最终实现在云端自由翱翔的梦想。我们将一起见证代码如何转化为业务的翅膀,让你的应用在云海中高飞。
|
4月前
|
存储 安全 数据库
阿里云服务器计算型、通用型、内存型主要实例规格性能特点和适用场景汇总
阿里云服务器ECS计算型、通用型、内存型规格族属于独享型云服务器,在高负载不会出现计算资源争夺现象,因为每一个vCPU都对应一个Intel ® Xeon ®处理器核心的超线程,具有性能稳定且资源独享的特点。本文为大家整理汇总了阿里云服务器ECS计算型、通用型、内存型主要实例规格族具体实例规格有哪些,各个实例规格的性能特点和主要适用场景。
阿里云服务器计算型、通用型、内存型主要实例规格性能特点和适用场景汇总
|
8天前
|
监控 安全 程序员
如何使用内存池池来优化应用程序性能
如何使用内存池池来优化应用程序性能
|
11天前
|
存储 缓存 Java
结构体和类在内存管理方面的差异对程序性能有何影响?
【10月更文挑战第30天】结构体和类在内存管理方面的差异对程序性能有着重要的影响。在实际编程中,需要根据具体的应用场景和性能要求,合理地选择使用结构体或类,以优化程序的性能和内存使用效率。
|
1月前
|
存储 缓存 监控
Linux中内存和性能问题
【10月更文挑战第5天】
38 4
|
2月前
|
缓存 Java 测试技术
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
使用JMeter对项目各个接口进行压力测试,并对前端进行动静分离优化,优化三级分类查询接口的性能
谷粒商城笔记+踩坑(11)——性能压测和调优,JMeter压力测试+jvisualvm监控性能+资源动静分离+修改堆内存
|
21天前
|
存储 分布式计算 安全
阿里云服务器内存型r7、内存型r8y、内存型r8i实例规格性能对比与选择参考
在选择阿里云服务器实例规格时,针对内存密集型应用和数据库应用,内存型r7、内存型r8y和内存型r8i实例是这部分应用场景选择最多的热门实例规格。为了帮助大家更好地了解这三款实例的区别,并为选择提供参考,本文将详细对比它们的实例规格、CPU、内存、计算、存储、网络等方面的性能,并附上活动价格对比。让大家了解一下他们之间的不同,以供参考选择。
|
1月前
|
数据处理 Python
如何优化Python读取大文件的内存占用与性能
如何优化Python读取大文件的内存占用与性能
114 0
|
2月前
|
监控 算法 Java
深入理解Java中的垃圾回收机制在Java编程中,垃圾回收(Garbage Collection, GC)是一个核心概念,它自动管理内存,帮助开发者避免内存泄漏和溢出问题。本文将探讨Java中的垃圾回收机制,包括其基本原理、不同类型的垃圾收集器以及如何调优垃圾回收性能。通过深入浅出的方式,让读者对Java的垃圾回收有一个全面的认识。
本文详细介绍了Java中的垃圾回收机制,从基本原理到不同类型垃圾收集器的工作原理,再到实际调优策略。通过通俗易懂的语言和条理清晰的解释,帮助读者更好地理解和应用Java的垃圾回收技术,从而编写出更高效、稳定的Java应用程序。