java设计高并发内存池_C++实现高并发内存池

【实例简介】使用C 语言,实现高并发内存池

【实例截图】

085d128cef904b1bbfc090ee86549b49.png

【核心代码】

void BenchmarkMalloc(size_t ntimes, size_t nworks, size_t rounds)

{

std::vector<:thread> vthread(nworks);

size_t malloc_costtime = 0;

size_t free_costtime = 0;

for (size_t k = 0; k < nworks; k)

{

vthread[k] = std::thread([&, k]() {

std::vector v;

v.reserve(ntimes);

for (size_t j = 0; j < rounds; j)

{

size_t begin1 = clock();

for (size_t i = 0; i < ntimes; i )

{

v.push_back(malloc(16));

}

size_t end1 = clock();

size_t begin2 = clock();

for (size_t i = 0; i < ntimes; i )

{

free(v[i]);

}

size_t end2 = clock();

v.clear();

malloc_costtime = end1 - begin1;

free_costtime = end2 - begin2;

}

});

}

for (auto& t : vthread)

{

t.join();

}

printf("%u个线程并发执行%u轮次,每轮次malloc %u次: 花费:%u ms\n", nworks, rounds, ntimes, malloc_costtime);

printf("%u个线程并发执行%u轮次,每轮次free %u次: 花费:%u ms\n",

nworks, rounds, ntimes, free_costtime);

printf("%u个线程并发malloc&free %u次,总计花费:%u ms\n",

nworks, nworks*rounds*ntimes, malloc_costtime free_costtime);

}

// 单轮次申请释放次数 线程数 轮次

void BenchmarkConcurrentMalloc(size_t ntimes, size_t nworks, size_t rounds)

{

std::vector<:thread> vthread(nworks);

size_t malloc_costtime = 0;

size_t free_costtime = 0;

for (size_t k = 0; k < nworks; k)

{

vthread[k] = std::thread([&]() {

std::vector v;

v.reserve(ntimes);

for (size_t j = 0; j < rounds; j)

{

size_t begin1 = clock();

for (size_t i = 0; i < ntimes; i )

{

v.push_back(ConcurrentAlloc(16));

}

size_t end1 = clock();

size_t begin2 = clock();

for (size_t i = 0; i < ntimes; i )

{

ConcurrentFree(v[i],sizeof(v[i]));

}

size_t end2 = clock();

v.clear();

malloc_costtime = end1 - begin1;

free_costtime = end2 - begin2;

}

});

}

for (auto& t : vthread)

{

t.join();

}

printf("%u个线程并发执行%u轮次,每轮次concurrent alloc %u次: 花费:%u ms\n",

nworks, rounds, ntimes, malloc_costtime);

printf("%u个线程并发执行%u轮次,每轮次concurrent dealloc %u次: 花费:%u ms\n",

nworks, rounds, ntimes, free_costtime);

printf("%u个线程并发concurrent alloc&dealloc %u次,总计花费:%u ms\n",

nworks, nworks*rounds*ntimes, malloc_costtime free_costtime);

}

int main()

{

cout << "==========================================================" << endl;

BenchmarkMalloc(100000, 4, 10);

cout << endl << endl;

BenchmarkConcurrentMalloc(100000, 4, 10);

cout << "==========================================================" << endl;

system("pause");

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值