async tool map

결과는 future로 받고, 책임 위치로 도구를 고른다

어떤 도구를 쓸지는 “누가 작업을 시작하고, 누가 결과를 확정하는가”로 결정하면 됩니다.

함수 하나를 바로 맡기고 싶다

std::async

실행과 결과 연결을 한 번에 처리합니다. future = async(f)

값을 나중에 직접 넣고 싶다

std::promise

producer가 결과나 예외를 명시적으로 확정합니다. set_value()

작업을 큐나 스레드 풀에 넣고 싶다

packaged_task

callable을 future와 묶고, 실행 위치는 사용자가 정합니다. task()

공통점

세 도구 모두 결과 또는 예외를 `future`를 통해 소비자에게 전달합니다.

get은 한 번

`std::future`의 `get()`은 결과를 꺼내며, 보통 한 번만 호출합니다.

블록 지점

`get()` 또는 `wait()`가 결과 준비 전이면 호출 스레드가 기다립니다.