使用boost :: pool时使用高CPU
High CPU usage on using boost::pool
我试图使用boost::pool
来减少内存分配的CPU消耗,但是分析测试代码的结果却不如预期。这是测试代码。
main1.cpp
#include "pool_singleton.h"
int main()
{
const int size = 400000;
for (int i = 0; i < 100000; ++i)
{
auto obj = pNew uint8_t[size]; // use singleton_pool
pDelete(obj, size);
}
return 0;
}
main2.cpp
#include "pool_singleton.h"
int main()
{
const int size = 400000;
for (int i = 0; i < 100000; ++i)
{
auto obj = new uint8_t[size];
delete[] obj;
}
return 0;
}
pool_singleton.h
#pragma once
#include <iostream>
#include <memory>
// boost
#include <boost/pool/singleton_pool.hpp>
struct pNewTag{};
typedef boost::singleton_pool<pNewTag, 1> pool;
inline void* operator new (size_t size, int num)
{
auto ptr = pool::ordered_malloc(size);
return ptr;
}
template<int N>
struct memMan
{
static memMan<N> x;
inline static void delete_ptr(void *p, size_t size)
{
pool::free(p, size);
}
static inline void pool_destroy()
{
pool::purge_memory();
}
};
template<int N>
memMan<N> memMan<N>::x;
#define pNew new(1)
#define pDelete(p, size) memMan<0>::delete_ptr(p, size)
#define purge memMan<0>::pool_destroy()
main1.cpp 的CPU用法高是 main2.CPP 的两倍。
我希望 main1.cpp 的CPU使用情况会随着时间的流逝而下降,但它一直保持很高直到结束。问题是
- 我的singleton_pool使用错误?
- 有没有想法减少singleton_pool的CPU消耗?
- 还有其他想法可以减少CPU消耗内存分配吗?
您正在考虑错误使用CPU。如果CPU使用率少于100%,则意味着CPU上的资源正在浪费。如果CPU使用率为100%,则意味着CPU尽可能快地进步。
所有其他事情都是平等的,因为基本上要求CPU进行工作的任务越高,CPU使用越高,这意味着工作正在尽快完成。CPU只要有某种原因就不能出于某种原因(例如必须等待I/O或过热),CPU将全速运行。
相反,请测量工作的总CPU消耗。更有效的代码将需要更少的CPU才能完成等效工作。
我希望Main1.cpp的CPU使用时间会随着时间的流逝而下降,但是直到结束。
太棒了。这意味着CPU尽可能快地完成工作,直到完成所有工作。在CPU仍然有工作要做的情况下,任何跌至100%以下的下降都只是表明有些效率低下,阻止CPU尽快完成工作。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- boost::进程间消息队列引发错误
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- cmake如何在fedora工作站中找到boost静态库包
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- Boost Graph Library,修复节点大小
- 什么是"#include <boost/functional/hash.hpp> "?
- 基于boost的程序的静态链接——zlib问题
- C++:如何在CLion IDE中安装Boost
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- 如何在boost beast http请求中设置http头
- 如何做 boost::asio::spawn 与 io_service-per CPU.
- 使用boost :: pool时使用高CPU
- 使用boost :: Beast进行CPU重的REST API,我是否应该使用异步或同步方式来实现它们以期望延迟
- boost :: lockfree ::队列正在吃我的CPU
- boost::posix_time::microc_clock是否占用CPU
- boost::asio::async_read在简单示例中使用了100%的CPU
- Boost::Thread API中的CPU亲和性
- Boost asio和线程,如果我运行两个实例,我得到cpu在100%