future tool chooser

비동기 도구는 “누가 실행하고, 누가 값을 확정하나”로 고른다

세 도구 모두 결과는 future로 받지만, 실행 시작과 결과 확정의 책임이 다릅니다.

도구
std::async
std::promise
packaged_task
실행 시작
호출 시점 또는 launch 정책이 정한다.
도구 자체는 실행하지 않고 생산자 스레드가 따로 움직인다.
사용자가 task를 호출하는 위치와 시점에서 시작한다.
값 확정
함수 반환값과 예외가 자동으로 저장된다.
set_value 또는 set_exception을 직접 호출한다.
래핑된 callable의 결과가 자동으로 저장된다.
선택 기준
함수 하나를 바로 비동기로 맡길 때.
값 생산자와 소비자가 서로 다른 위치에 있을 때.
스레드 풀이나 작업 큐에 넣어 나중에 실행할 때.

std::async

실행호출 시점 또는 launch 정책이 정한다.
반환값과 예외가 자동으로 저장된다.
쓸 때함수 하나를 바로 비동기로 맡길 때.

std::promise

실행도구 자체는 실행하지 않고 생산자가 따로 움직인다.
set_value 또는 set_exception으로 직접 확정한다.
쓸 때값 생산자와 소비자가 서로 다른 위치에 있을 때.

packaged_task

실행사용자가 task를 호출하는 위치와 시점에서 시작한다.
래핑된 callable의 결과가 자동으로 저장된다.
쓸 때스레드 풀이나 작업 큐에 넣어 나중에 실행할 때.

판단 순서: 실행까지 맡기면 async, 값만 나중에 넣으면 promise, 실행 위치를 직접 제어하면 packaged_task입니다.