[c++] 코루틴을 사용한 비동기 작업 처리
본 포스트에서는 C++에서 코루틴을 활용하여 비동기 작업을 처리하는 방법에 대해 다룹니다.
코루틴이란?
코루틴은 함수의 실행을 일시 중단하고 나중에 재개할 수 있는 구조를 갖춘 기능입니다. 이를 통해 비동기 작업 처리와 관련된 복잡한 코드를 더욱 간단하게 작성할 수 있습니다.
C++에서 코루틴 사용하기
C++ 20부터는 코루틴을 공식적으로 지원하기 시작했습니다. 아래는 코루틴을 사용하여 비동기 작업을 처리하는 간단한 예제 코드입니다.
#include <iostream>
#include <coroutine>
#include <chrono>
struct Task {
struct promise_type {
auto initial_suspend() { return std::suspend_always{}; }
auto final_suspend() noexcept { return std::suspend_always{}; }
Task get_return_object() { return Task{std::coroutine_handle<promise_type>::from_promise(*this)}; }
void return_void() {}
void unhandled_exception() { std::terminate(); }
};
std::coroutine_handle<promise_type> coro;
explicit Task(std::coroutine_handle<promise_type> c) : coro(c) {}
~Task() {
if (coro) coro.destroy();
}
};
Task asynchronousTask() {
co_await std::suspend_always{};
std::cout << "비동기 작업 시작" << std::endl;
co_await std::suspend_always{};
std::cout << "비동기 작업 완료" << std::endl;
}
int main() {
Task task = asynchronousTask();
task.coro.resume();
std::cout << "메인 작업 진행 중" << std::endl;
}
위 예제 코드에서는 asynchronousTask
함수를 코루틴으로 정의하고, 메인 함수에서 해당 코루틴을 호출하고 진행하는 방법을 보여줍니다.
마치며
코루틴은 C++에서 비동기 작업을 간단하게 다룰 수 있도록 도와주는 강력한 기능입니다. 본 포스트를 통해 코루틴의 기본 개념과 활용 방법에 대해 간략히 살펴보았습니다. 추가적인 자세한 내용은 C++ 코루틴에 관한 공식 문서를 참고하시기를 권장합니다.
참고 자료
- C++ 코루틴 문서
- C++ Concurrency in Action. Williams, Anthony. Manning Publications, 2019.