2
힙 할당은 응용 프로그램에서 병목 현상이 발생하며 작은 작업을 스레드 풀로 보낼 때이를 방지하고 싶습니다.작업 대기시 힙 할당 수 감소
스택 할당자를 사용하여 std::packaged_task
을 사용할 수 있습니까? 어떤 조건 하에서? 이 선택의 장단점은 무엇입니까? 교환 원 new
에 의해 std::future
의 공유 상태의 힙 할당을 피하는 더 나은 대안이 있습니까?
auto foo() {
arena<1024> buffer;
auto task = std::packaged_task<int()>{
std::allocator_arg_t,
arena_allocator{arena},
[]() -> int { return 5; }
};
auto f = task.get_future(); // is this future and its shared state stack allocated?
thread_pool.push_back(std::move(task));
// I will probably need to block before the stack goes out of scope..
return f.get();
}
다른 스레드가 작업을 완료하기를 기다리는 것을 차단하려는 경우이 스레드에서 작업을 직접 실행할 수도 있습니다. 그것은 여러 스레드를 갖는 모든 지점을 무력화시키는 것 같습니다. –
@IgorTandetnik 돌아 오기 전에 계산이 끝나기를 기다릴 것입니다. 이것은 다른 스레드에서 계산이 실행되는 동안이 스레드에서 다른 작업을 수행하거나 여러 스레드에서 여러 계산을 실행할 수있게합니다. 그것은 또한 내가 성장함에 따라 미래에 스택을 넘겨 줄 수도 있습니다 ... 또는 공유 상태가 살아있는 로컬 스택이 종료되기 전에 분리 된 쓰레드에서 계산을 실행하기까지합니다. – gnzlbg