C++

비동기 프로그래밍

현대 C++는 이러한 복잡성을 추상화하여 더 쉽고 안전하게 동시성을 활용할 수 있도록 std::async와 std::future 같은 비동기 프로그래밍(Asynchronous Programming) 도구를 둡니다. 비동기 프로그래밍은 작업을 백그라운드에서 실행하고, 결과가 준비되면 알림을 받는 방식으로, 주 스레드가 블록되지 않고 다른 작업을 계속 수행할 수 있게 합니다.

비동기 작업을 분리할 때 future, promise, async 실행 정책이 어떤 책임을 나누는지 확인합니다.

비동기 프로그래밍 흐름

1

비동기 프로그래밍의 기준

일반적인 동기(Synchronous) 프로그래밍에서는 함수 호출이 완료될 때까지 호출자(caller) 스레드가 대기합니다.

2

std::async와 std::future

C++11에서 도입된 std::async는 함수를 비동기적으로 실행하고 그 결과를 std::future 객체를 통해 나중에 비동기적으로 가져올 수 있게 해주는 템플릿 함수입니다.

3

std::promise

std::promise는 std::future와 함께 사용되어, 한 스레드에서 결과를 약속(promise)하고, 다른 스레드에서 이 결과를 기다리는(future) 패턴을 구현합니다.

4

std::packaged task

std::packaged task는 호출 가능한 객체(함수, 람다, 함수 객체)를 std::future와 연결하여 비동기적으로 실행할 수 있도록 래핑(wrap)하는 클래스 템플릿입니다.