콘텐츠로 이동

코루틴 (Coroutines)

프로젝트 리더가 승인한 라이브러리를 통해서만 C++20 코루틴을 사용하세요.

C++20에서는 나중에 실행을 일시 중지하고 다시 시작할 수 있는 함수인 코루틴을 도입했습니다. 이는 전통적인 콜백 기반 프레임워크에 비해 상당한 개선을 제공할 수 있는 비동기 프로그래밍에 특히 편리합니다.

대부분의 다른 프로그래밍 언어(Kotlin, Rust, TypeScript 등)와 달리 C++는 코루틴의 구체적인 구현을 제공하지 않습니다. 대신, 사용자는 코루틴 매개변수 유형, 코루틴 실행 방법을 결정하고 다양한 실행 단계에서 사용자 정의 코드를 실행할 수 있도록 허용하는 자체 대기 가능 유형(promise 유형 사용)을 구현해야 합니다.

  • 코루틴은 비동기 프로그래밍과 같은 특정 작업에 적합한 안전하고 효율적인 라이브러리를 구현하는 데 사용할 수 있습니다.
  • 코루틴은 구문론적으로 코루틴이 아닌 함수와 거의 동일하므로 다른 함수보다 훨씬 더 읽기 쉽습니다.
  • 높은 수준의 사용자 정의를 통해 대안에 비해 더 자세한 디버깅 정보를 코루틴에 삽입할 수 있습니다.

  • 표준 코루틴 약속 유형은 없으며 각 사용자 정의 구현은 어떤 측면에서 고유할 가능성이 높습니다.

  • 반환 유형, Promise 유형의 다양한 사용자 정의 가능한 후크 및 컴파일러 생성 코드 간의 로드 베어링 상호 작용으로 인해 코루틴 의미 체계는 사용자 코드를 읽어서 추론하기가 매우 어렵습니다.
  • 코루틴의 많은 사용자 정의 가능한 측면은 특히 매달린 참조 및 경쟁 조건과 관련하여 많은 함정을 야기합니다.

요약하자면, 상호 운용 가능한 고품질 코루틴 라이브러리를 설계하려면 많은 양의 어려운 작업, 신중한 생각 및 광범위한 문서가 필요합니다.

프로젝트 리더가 프로젝트 전체에서 사용하도록 승인한 코루틴 라이브러리만 사용하세요. 자신만의 약속이나 대기 가능한 유형을 굴리지 마세요.


이해하기 쉽게 설명하기

핵심: 승인된 라이브러리를 통해서만 사용

C++20 코루틴은 실행을 멈췄다 재개할 수 있는 함수로, 비동기 프로그래밍에 유용합니다. 하지만 C++는 구체적 구현을 제공하지 않아, 사용자가 promise·awaitable 타입을 직접 만들어야 하며 이는 매우 어렵고 함정(댕글링 참조, 경쟁 조건)이 많습니다.

규칙

  • 프로젝트 리드가 승인한 코루틴 라이브러리만 쓰세요.
  • 직접 promise/awaitable 타입을 만들지(roll your own) 마세요.