C++ Coroutine 의 개념 및 구현 특성

Source

  • Evernote/Technote scraps/게임 개발 포에버 C++ Coroutine.md

Summary

본문은 Coroutine 을 Main Routine 과 대등한 관계로 진입 지점이 여러 개 있는 Subroutine 으로 정의하며, Thread 와의 유사점(스택 존재)과 차이점(독립적 시간 흐름 vs 호출자 재호출 가능)을 설명한다. C++ 은 공식적으로 Coroutine 을 지원하지 않아 Boost 라이브러리 (boost::context) 를 통해 구현되며, 이는 레지스터 저장 및 점프를 통한 경량 Context Switching 을 수행한다. 다만 C++ Coroutine 은 실행 전 고정 크기의 스택을 미리 할당해야 하며, 동적 확장이 어려워 메모리 관리에 주의가 필요함을 지적한다.

Key Points

  • Coroutine 은 진입 지점이 여러 개 있고 호출한 루틴을 다시 호출할 수 있는 대등한 관계의 서브루틴이다.
  • Thread 는 독립적인 시간 흐름을 가지지만, Coroutine 은 여러 Thread 에서 실행될 수 있으며 비동기 로직 처리에 유용하다.
  • C++ 은 공식 Coroutine 지원을 하지 않아 Boost Coroutine(1.53+) 과 boost::context 를 주로 사용한다.
  • Boost Context 의 Context Switching 은 레지스터 (EDI, ESI, EBX, EBP, ESP 등) 저장/복원 및 jmp 명령을 통해 OS Thread 전환보다 가볍게 처리된다.
  • C++ Coroutine 의 주요 제약은 실행 전 고정 크기의 스택을 미리 할당해야 하며, 할당된 스택은 일반적으로 동적으로 확장되지 않는다는 점이다.