async/future

비동기 작업은 실행 흐름과 결과 수신 시점을 분리한다

std::async, std::future, std::promise, std::packaged_task, launch 정책은 작업 시작과 결과 회수를 조절합니다.

std::async

async/future 결과

launch::async와 launch::deferred 정책에 따라 실행 시점이 달라집니다.

future

나중에 도착할 값이나 예외를 받는 손잡이입니다

get()은 결과를 가져오며 보통 한 번만 호출할 수 있습니다.

promise

promise/future 전달

스레드 간 결과 전달 채널을 명시적으로 만들 때 사용합니다.

packaged_task

packaged_task와 future

작업 큐나 스레드 풀 구조의 재료가 됩니다.

wait 결과가 필요하지만 값을 꺼내지 않을 때 대기만 할 수 있습니다.
예외 전달 비동기 작업에서 난 예외는 future::get() 시점에 다시 던져질 수 있습니다.
thread 비교 직접 join을 관리하기보다 결과 중심 API가 필요하면 async 계열이 단순합니다.