future based async

작업 시작 방식에 따라 도구 선택

`std::future`는 결과를 받는 공통 통로이고, `async`, `promise`, `packaged_task`는 그 결과를 준비하는 방식이 다릅니다.

std::async auto f = std::async(fn);

함수 실행과 `future` 생성을 한 번에 처리합니다.

사용 지점

스레드 관리를 직접 하지 않고 계산 결과만 나중에 받을 때 적합합니다.

std::promise prom.set_value(data);

생산자 스레드가 값이나 예외를 명시적으로 넣습니다.

사용 지점

데이터 준비 시점과 소비 시점을 분리해 스레드 간 통신을 만들 때 씁니다.

std::packaged_task std::thread(std::move(task), 10);

호출 가능한 객체를 `future`와 연결한 뒤 실행 위치를 직접 정합니다.

사용 지점

스레드 풀이나 작업 큐처럼 작업 생성과 실제 실행 위치를 분리할 때 씁니다.