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