Coroutine, Condition Variable, Callback의 차

lsh235·2025년 2월 20일
0

c++

목록 보기
4/4
  1. 코루틴 (Coroutine)
    언어 차원의 지원: C++20부터 표준에 포함된 기능으로, 함수 실행을 일시 중단(suspend)하고 나중에 재개(resume)할 수 있게 합니다.
    비동기 코드의 자연스러운 표현: 비동기 작업이나 지연 계산을 동기 코드처럼 작성할 수 있어 복잡한 콜백 체인을 피할 수 있습니다.
    키워드 사용: co_await, co_yield, co_return 등의 키워드를 통해 상태를 관리하며, 컴파일러가 내부적으로 상태 머신으로 변환합니다.
    응용 분야: 비동기 I/O, 제너레이터, 스트림 처리 등에서 활용됩니다.

  2. 조건 변수 (Condition Variable)
    스레드 동기화 도구: 여러 스레드가 공유 데이터에 접근할 때, 특정 조건이 만족될 때까지 한 스레드를 대기시키고 다른 스레드가 조건을 충족하면 통지(notify)하는 데 사용됩니다.
    뮤텍스와 함께 사용: std::condition_variable은 반드시 std::mutex와 함께 사용하여 데이터 경쟁(race condition)을 방지합니다.
    동기화 메커니즘: 스레드 간의 협력을 위해, 한 스레드는 조건이 만족될 때까지 대기(wait)하고, 다른 스레드는 조건 변경 후 notify_one 또는 notify_all을 호출해 대기 중인 스레드를 깨웁니다.

  3. 콜백 (Callback)
    함수 포인터/객체 기반 기법: 특정 이벤트나 작업이 완료되었을 때 호출될 함수를 미리 등록해두는 방식입니다. 함수 포인터, 람다, std::function 등을 활용합니다.
    비동기 이벤트 처리: 비동기 작업의 결과를 처리하거나, 이벤트 기반 프로그래밍에서 후속 처리를 위해 자주 사용됩니다.
    패턴의 특성: 언어의 기능이라기보다는 디자인 패턴으로, 복잡한 중첩 구조(일명 "콜백 헬")로 인해 코드 가독성이 떨어질 수 있으며, 이를 개선하기 위해 코루틴이나 프라미스(promise) 등 다른 기법이 등장하기도 했습니다.


핵심 차이점 정리
코루틴: 언어 수준의 기능으로, 함수의 실행을 중단 및 재개하여 비동기 흐름을 보다 직관적으로 작성할 수 있습니다.
조건 변수: 멀티스레딩 환경에서 스레드 간의 동기화를 위해 사용되는 낮은 수준의 동기화 도구입니다.
콜백: 이벤트 발생 시 실행될 함수를 미리 등록하는 프로그래밍 패턴으로, 주로 비동기 이벤트 처리에 사용됩니다.

0개의 댓글