C++ async/future

future 전달 범위

비동기 작업은 함수를 따로 실행하는 것보다 결과를 언제 기다리고 실패를 어디서 처리할지가 중요하다. async launch policy, future::get의 1회성, 예외 전달을 함께 확인한다.

01

작업 분리

독립적으로 계산 가능하고 공유 상태 접근이 적은 일을 비동기로 보낸다.

병렬 이득 확인
02

정책 선택

즉시 새 실행을 원하면 launch::async, 지연 실행을 허용하면 deferred를 고려한다.

기본은 구현 선택
03

결과 대기

wait, wait_for로 준비 여부를 확인하고 get으로 값을 한 번만 가져온다.

get은 소비
04

예외 처리

작업 중 던진 예외는 future에 저장되고 get 호출 지점에서 다시 던져진다.

처리 경계
launch::async
비동기 실행 강제 다른 실행 흐름에서 시작되지만 스레드 수 폭발 가능성을 본다.
풀 아님
deferred
get/wait 시 실행 병렬성이 아니라 지연 평가라 성능 기대가 다르다.
호출 스레드 실행
promise
수동 결과 설정 스레드와 future를 직접 연결해 값이나 예외를 전달한다.
채널 역할
shared_future
여러 소비자 future::get은 1회성이므로 여러 곳에서 읽으려면 shared_future가 필요하다.
복수 조회

get 호출 · 공유 상태 · 정책 점검

get 호출 결과를 회수하지 않아 예외가 묻히거나 작업 수명이 애매해지지 않는지 본다.
공유 상태 비동기 함수가 참조한 객체가 future 완료 전까지 살아 있는지 확인한다.
정책 기본 policy에 기대어 병렬 실행된다고 가정하지 않는지 검토한다.