저는 응용 프로그램입니다. 특정 유형의 자원 할당 속도를 높이기 위해 풀을 사용하고 있습니다.풀 쓰레기 수거 전략
예 :
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);
});
}
이 방법은 잘 작동하지만 성능이 좋지 않은 문제가 있습니다.
내 응용 프로그램에서 리소스 사용이 변경되면 사전에 할당 된 많은 리소스가 필요하지 않으며 메모리 공간 만 차지합니다.
특정 풀링 된 리소스가 다시 할당되고 풀을 동적으로 조정해야하는시기를 어떻게 든 감지 할 수있는 전략이 필요합니다. 풀이 1 초 이상 2 미만의 크기를 가지지 않으면 하나의 리소스가 해제됩니다.
풀링 리소스의 추가 성능을 유지하면서 메모리 사용을 최소화하기 위해 어떤 전략을 사용할 수 있는지에 관해 의견이있는 사람이 있습니까?
내부 데이터를 재 배열 할 수 없다면 작동하지 않습니다. 내부 데이터는 풀로는 사용할 수 없습니다. –
예, 그게 한계입니다. 그러나 포인터를 사용하여 자원을 재배치 할 수 있습니다. –
또한, 나는 이것이 내부 대기열에 적용된다는 것을 깨달았습니다. 내 잘못이야. –