Я использую пулы для ускорения выделения ресурсов определенных типов:
, например
tbb::concurrent_unordered_map<size_t, tbb::concurrent_bounded_queue<resource>> pools;
std::shared_ptr<resource> create_resource(size_t size)
{
auto pool = pools[size];
std::shared_ptr<resource> resource;
if(!pool->try_pop(resource))
resource.reset(new resource(size));
return std::shared_ptr<host_buffer>(resource.get(), [=](resource*)
{
pool->push(resource);
});
}
Это хорошо работает, однако у меня есть некоторые проблемы с высоким использованием памяти.
Если в моем приложении изменяется использование ресурсов, у меня есть много предварительно выделенных ресурсов, которые не нужны и занимают только место в памяти.
Мне понадобится какая-то стратегия, которая позволила бы мне каким-то образом обнаружить, когда не ожидается повторное выделение определенного объединенного ресурса, и динамически адаптировать пулы, например, если размер пула не превышает 2 в течение более секунды, то освобождается один ресурс.
Есть ли у кого-нибудь какие-либо предложения относительно того, какие стратегии можно использовать для минимизации использования памяти при сохранении большей производительности при объединении ресурсов в пул.