C++20 Coroutine

C++20 Coroutine
Coroutine
코루틴은 자신의 상태를 유지하면서 실행을 일시 정지하거나 재개할 수 있는 함수
Coroutine
같은 스레드에서 제어권이 변경 되는 것이기 때문에 동기화 문제가 발생하지
않는다
쓰레드 보다 적은 비용이 든다
코루틴 객체는 힙에 생성이 된다
코루틴 객체의 수명에 유의 해야 한다
구현이 어렵다(C++, 개인적인 생각…)
코루틴을 적용할 수 없는 함수들
가변 인자
일반 return 문을 사용
constexpr, consteval
생성자, 소멸자
main
추가된 키워드
co_await 표현식 : 재개 될 때까지 일시 중지
std::size_t n = co_await socket.async_read_some(buffer(data));
co_yield 표현식 : 값을 반환하고 일시 중지
while (true) co_yield n++;
co_return 문 : 값을 반환하고 끝낸다
co_return 7;
구현시 필요한 것들
promise
"코루틴 내부"에서 관리 되는 객체. 코루틴의 결과나 예외를 이 객체를 통해
호출자에게 전달 하는 용도로 사용
코루틴 핸들
"코루틴 외부"에서 관리 되는 객체. 코루틴을 resume하거나 코루틴 프레임을
제거 할 때 사용
코루틴 프레임
"힙 메모리 영역"에 할당 되는 코루틴 상태를 나타내는 객체
promise
아래의 멤버 함수 중 일부를 구현해야한다
구현한 함수는 컴파일러가 자동으로 호출한다
코루틴 핸들
promise_type이라는 내부 형식을 정의하고 있어야한다
직접 정의하거나 std::coroutine_traits를 Generator로 특수화한
std::coroutine_traits<Generator>를 public 형식 멤버 promise_type으로 두어도
된다.
코루틴 프레임
약속 객체, 코루인 인수들의 복사본, 정지 시점을 나타내는 객체, 내부의 지역 변수
등으로 구성됨
대기 가능 객체
코루틴이 일시정지 중인지 아닌지 판정
대기자 객체
대기 가능 객체가 종료 혹은 일시 정지 되길 기다리는 객체
co_await 연산자를 정의하거나 대기 가능 객체를 대기자 객체로 변환해야 한다
대기 가능 객체
Awaitable 콘셉트를 충족해야 함
정의 되어있는 std:: suspend_always 와 std::suspend_never 타입을 사용해도 된다
C++20 Coroutine
예제 코드
예제 코드
예제 코드 - 호출 순서
예제 코드 2
예제 코드 2
예제 코드 2
1 de 17

Recomendados

테라로 살펴본 MMORPG의 논타겟팅 시스템 por
테라로 살펴본 MMORPG의 논타겟팅 시스템테라로 살펴본 MMORPG의 논타겟팅 시스템
테라로 살펴본 MMORPG의 논타겟팅 시스템QooJuice
3.3K vistas58 diapositivas
Lock free queue por
Lock free queueLock free queue
Lock free queueBongseok Cho
472 vistas59 diapositivas
임태현, MMO 서버 개발 포스트 모템, NDC2012 por
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012devCAT Studio, NEXON
6.1K vistas141 diapositivas
GCGC- CGCII 서버 엔진에 적용된 기술 (1) por
GCGC- CGCII 서버 엔진에 적용된 기술 (1)GCGC- CGCII 서버 엔진에 적용된 기술 (1)
GCGC- CGCII 서버 엔진에 적용된 기술 (1)상현 조
2.2K vistas10 diapositivas
[0410 박민근] 기술 면접시 자주 나오는 문제들 por
[0410 박민근] 기술 면접시 자주 나오는 문제들[0410 박민근] 기술 면접시 자주 나오는 문제들
[0410 박민근] 기술 면접시 자주 나오는 문제들MinGeun Park
11.6K vistas25 diapositivas
[Unite2015 박민근] 유니티 최적화 테크닉 총정리 por
[Unite2015 박민근] 유니티 최적화 테크닉 총정리[Unite2015 박민근] 유니티 최적화 테크닉 총정리
[Unite2015 박민근] 유니티 최적화 테크닉 총정리MinGeun Park
33.6K vistas51 diapositivas

Más contenido relacionado

La actualidad más candente

심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018 por
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018devCAT Studio, NEXON
5.7K vistas114 diapositivas
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012 por
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012devCAT Studio, NEXON
3.5K vistas63 diapositivas
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance por
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance상현 조
3.7K vistas62 diapositivas
NDC12_Lockless게임서버설계와구현 por
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현noerror
7.7K vistas48 diapositivas
LockFree Algorithm por
LockFree AlgorithmLockFree Algorithm
LockFree AlgorithmMerry Merry
485 vistas46 diapositivas
GameInstance에 대해서 알아보자 por
GameInstance에 대해서 알아보자GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자TonyCms
1.8K vistas33 diapositivas

La actualidad más candente(20)

심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018 por devCAT Studio, NEXON
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
심예람, <프로젝트DH> AI 내비게이션 시스템, NDC2018
devCAT Studio, NEXON5.7K vistas
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012 por devCAT Studio, NEXON
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
양승명, 다음 세대 크로스플랫폼 MMORPG 아키텍처, NDC2012
devCAT Studio, NEXON3.5K vistas
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance por 상현 조
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - PerfornanceGCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
GCGC- CGCII 서버 엔진에 적용된 기술 (2) - Perfornance
상현 조3.7K vistas
NDC12_Lockless게임서버설계와구현 por noerror
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
noerror7.7K vistas
LockFree Algorithm por Merry Merry
LockFree AlgorithmLockFree Algorithm
LockFree Algorithm
Merry Merry485 vistas
GameInstance에 대해서 알아보자 por TonyCms
GameInstance에 대해서 알아보자GameInstance에 대해서 알아보자
GameInstance에 대해서 알아보자
TonyCms1.8K vistas
언리얼을 활용한 오브젝트 풀링 por TonyCms
언리얼을 활용한 오브젝트 풀링언리얼을 활용한 오브젝트 풀링
언리얼을 활용한 오브젝트 풀링
TonyCms1.3K vistas
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원 por 강 민우
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원
강 민우3K vistas
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기 por Yongha Kim
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
[NDC 2010] 그럴듯한 랜덤 생성 컨텐츠 만들기
Yongha Kim8K vistas
Multiplayer Game Sync Techniques through CAP theorem por Seungmo Koo
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theorem
Seungmo Koo11.8K vistas
MMOG Server-Side 충돌 및 이동처리 설계와 구현 por YEONG-CHEON YOU
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
YEONG-CHEON YOU1.6K vistas
NDC 11 자이언트 서버의 비밀 por 승명 양
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
승명 양4.4K vistas
UI아트 작업자를 위한 언리얼엔진4 UMG #1 por Hong-Gi Joe
UI아트 작업자를 위한 언리얼엔진4 UMG #1UI아트 작업자를 위한 언리얼엔진4 UMG #1
UI아트 작업자를 위한 언리얼엔진4 UMG #1
Hong-Gi Joe11.2K vistas
Reactive Programming by UniRx for Asynchronous & Event Processing por Yoshifumi Kawai
Reactive Programming by UniRx for Asynchronous & Event ProcessingReactive Programming by UniRx for Asynchronous & Event Processing
Reactive Programming by UniRx for Asynchronous & Event Processing
Yoshifumi Kawai65.5K vistas
[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례 por Hwanhee Kim
[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례
[NDC2017] 딥러닝으로 게임 콘텐츠 제작하기 - VAE를 이용한 콘텐츠 생성 기법 연구 사례
Hwanhee Kim14.7K vistas
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들 por 영욱 오
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
NDC2017 언리얼엔진4 디버깅 101 - 게임 기획자, 프로그래머가 버그와 만났을 때 사용할 수 있는 지침들
영욱 오6.8K vistas
Visual Studio를 이용한 어셈블리어 학습 part 2 por YEONG-CHEON YOU
Visual Studio를 이용한 어셈블리어 학습 part 2Visual Studio를 이용한 어셈블리어 학습 part 2
Visual Studio를 이용한 어셈블리어 학습 part 2
YEONG-CHEON YOU736 vistas
C++20에서 리플렉션 기능 구현 por Bongseok Cho
C++20에서 리플렉션 기능 구현C++20에서 리플렉션 기능 구현
C++20에서 리플렉션 기능 구현
Bongseok Cho1.6K vistas
Iocp 기본 구조 이해 por Nam Hyeonuk
Iocp 기본 구조 이해Iocp 기본 구조 이해
Iocp 기본 구조 이해
Nam Hyeonuk25K vistas

Similar a C++20 Coroutine

More effective c++ chapter1 2_dcshin por
More effective c++ chapter1 2_dcshinMore effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshinDong Chan Shin
1.6K vistas24 diapositivas
Effective c++(chapter 5,6) por
Effective c++(chapter 5,6)Effective c++(chapter 5,6)
Effective c++(chapter 5,6)문익 장
726 vistas82 diapositivas
Api design for c++ pattern por
Api design for c++ patternApi design for c++ pattern
Api design for c++ patternjinho park
1.2K vistas66 diapositivas
Api design for c++ ch3 pattern por
Api design for c++ ch3 patternApi design for c++ ch3 pattern
Api design for c++ ch3 patternjinho park
959 vistas66 diapositivas
Effective c++ Chapter1,2 por
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2문익 장
721 vistas60 diapositivas
More effective c++ chapter1,2 por
More effective c++ chapter1,2More effective c++ chapter1,2
More effective c++ chapter1,2문익 장
531 vistas64 diapositivas

Similar a C++20 Coroutine(12)

More effective c++ chapter1 2_dcshin por Dong Chan Shin
More effective c++ chapter1 2_dcshinMore effective c++ chapter1 2_dcshin
More effective c++ chapter1 2_dcshin
Dong Chan Shin1.6K vistas
Effective c++(chapter 5,6) por 문익 장
Effective c++(chapter 5,6)Effective c++(chapter 5,6)
Effective c++(chapter 5,6)
문익 장726 vistas
Api design for c++ pattern por jinho park
Api design for c++ patternApi design for c++ pattern
Api design for c++ pattern
jinho park1.2K vistas
Api design for c++ ch3 pattern por jinho park
Api design for c++ ch3 patternApi design for c++ ch3 pattern
Api design for c++ ch3 pattern
jinho park959 vistas
Effective c++ Chapter1,2 por 문익 장
Effective c++ Chapter1,2Effective c++ Chapter1,2
Effective c++ Chapter1,2
문익 장721 vistas
More effective c++ chapter1,2 por 문익 장
More effective c++ chapter1,2More effective c++ chapter1,2
More effective c++ chapter1,2
문익 장531 vistas
HolubOnPatterns/chapter3_3 por suitzero
HolubOnPatterns/chapter3_3HolubOnPatterns/chapter3_3
HolubOnPatterns/chapter3_3
suitzero407 vistas
이펙티브 C++ 스터디 por quxn6
이펙티브 C++ 스터디이펙티브 C++ 스터디
이펙티브 C++ 스터디
quxn61.2K vistas
포트폴리오에서 사용한 모던 C++ por KWANGIL KIM
포트폴리오에서 사용한 모던 C++포트폴리오에서 사용한 모던 C++
포트폴리오에서 사용한 모던 C++
KWANGIL KIM673 vistas
Modern C++ 프로그래머를 위한 CPP11/14 핵심 por 흥배 최
Modern C++ 프로그래머를 위한 CPP11/14 핵심Modern C++ 프로그래머를 위한 CPP11/14 핵심
Modern C++ 프로그래머를 위한 CPP11/14 핵심
흥배 최46.7K vistas
연산자 오버로딩 por 수빈 박
연산자 오버로딩연산자 오버로딩
연산자 오버로딩
수빈 박931 vistas

Más de 진화 손

C++ 20 class template argument deduction for alias templates por
C++ 20 class template argument deduction for alias templatesC++ 20 class template argument deduction for alias templates
C++ 20 class template argument deduction for alias templates진화 손
3 vistas3 diapositivas
C++ 20 Make stateful allocator propagation more consistent for operator+(basi... por
C++ 20 Make stateful allocator propagation more consistent for operator+(basi...C++ 20 Make stateful allocator propagation more consistent for operator+(basi...
C++ 20 Make stateful allocator propagation more consistent for operator+(basi...진화 손
5 vistas5 diapositivas
C++ 20 Unevaluated asm-declaration in constexpr functions por
C++ 20 Unevaluated asm-declaration in constexpr functionsC++ 20 Unevaluated asm-declaration in constexpr functions
C++ 20 Unevaluated asm-declaration in constexpr functions진화 손
4 vistas3 diapositivas
C++20 Utility functions to implement uses-allocator construction.pdf por
C++20 Utility functions to implement uses-allocator construction.pdfC++20 Utility functions to implement uses-allocator construction.pdf
C++20 Utility functions to implement uses-allocator construction.pdf진화 손
7 vistas9 diapositivas
C++ 20 std__reference_wrapper for incomplete types por
C++ 20 std__reference_wrapper for incomplete typesC++ 20 std__reference_wrapper for incomplete types
C++ 20 std__reference_wrapper for incomplete types진화 손
8 vistas2 diapositivas
C++ 20 Stronger Unicode requirements por
C++ 20 Stronger Unicode requirementsC++ 20 Stronger Unicode requirements
C++ 20 Stronger Unicode requirements진화 손
5 vistas2 diapositivas

Más de 진화 손(20)

C++ 20 class template argument deduction for alias templates por 진화 손
C++ 20 class template argument deduction for alias templatesC++ 20 class template argument deduction for alias templates
C++ 20 class template argument deduction for alias templates
진화 손3 vistas
C++ 20 Make stateful allocator propagation more consistent for operator+(basi... por 진화 손
C++ 20 Make stateful allocator propagation more consistent for operator+(basi...C++ 20 Make stateful allocator propagation more consistent for operator+(basi...
C++ 20 Make stateful allocator propagation more consistent for operator+(basi...
진화 손5 vistas
C++ 20 Unevaluated asm-declaration in constexpr functions por 진화 손
C++ 20 Unevaluated asm-declaration in constexpr functionsC++ 20 Unevaluated asm-declaration in constexpr functions
C++ 20 Unevaluated asm-declaration in constexpr functions
진화 손4 vistas
C++20 Utility functions to implement uses-allocator construction.pdf por 진화 손
C++20 Utility functions to implement uses-allocator construction.pdfC++20 Utility functions to implement uses-allocator construction.pdf
C++20 Utility functions to implement uses-allocator construction.pdf
진화 손7 vistas
C++ 20 std__reference_wrapper for incomplete types por 진화 손
C++ 20 std__reference_wrapper for incomplete typesC++ 20 std__reference_wrapper for incomplete types
C++ 20 std__reference_wrapper for incomplete types
진화 손8 vistas
C++ 20 Stronger Unicode requirements por 진화 손
C++ 20 Stronger Unicode requirementsC++ 20 Stronger Unicode requirements
C++ 20 Stronger Unicode requirements
진화 손5 vistas
C++20 Concepts library por 진화 손
C++20 Concepts libraryC++20 Concepts library
C++20 Concepts library
진화 손3 vistas
C++ 20 Relaxing the range-for loop customization point finding rules por 진화 손
C++ 20 Relaxing the range-for loop customization point finding rulesC++ 20 Relaxing the range-for loop customization point finding rules
C++ 20 Relaxing the range-for loop customization point finding rules
진화 손4 vistas
C++ 20 Relaxing the structured bindings customization point finding rules por 진화 손
C++ 20 Relaxing the structured bindings customization point finding rulesC++ 20 Relaxing the structured bindings customization point finding rules
C++ 20 Relaxing the structured bindings customization point finding rules
진화 손7 vistas
C++20 explicit(bool) por 진화 손
C++20 explicit(bool)C++20 explicit(bool)
C++20 explicit(bool)
진화 손6 vistas
C++20 std::map::contains por 진화 손
C++20 std::map::containsC++20 std::map::contains
C++20 std::map::contains
진화 손5 vistas
C++20 Comparing unordered containers por 진화 손
C++20 Comparing unordered containersC++20 Comparing unordered containers
C++20 Comparing unordered containers
진화 손8 vistas
C++20 Attributes [[likely]] and [[unlikely]] por 진화 손
C++20 Attributes [[likely]] and [[unlikely]]C++20 Attributes [[likely]] and [[unlikely]]
C++20 Attributes [[likely]] and [[unlikely]]
진화 손21 vistas
C++ 20 Lambdas in unevaluated contexts por 진화 손
C++ 20 Lambdas in unevaluated contextsC++ 20 Lambdas in unevaluated contexts
C++ 20 Lambdas in unevaluated contexts
진화 손4 vistas
C++20 Library support for operator<=> <compare> por 진화 손
C++20 Library support for operator<=> <compare>C++20 Library support for operator<=> <compare>
C++20 Library support for operator<=> <compare>
진화 손2 vistas
C++20 const mismatch with defaulted copy constructor por 진화 손
C++20 const mismatch with defaulted copy constructorC++20 const mismatch with defaulted copy constructor
C++20 const mismatch with defaulted copy constructor
진화 손5 vistas
C++20 Atomic std::shared_ptr and std::weak_ptr por 진화 손
C++20 Atomic std::shared_ptr and std::weak_ptrC++20 Atomic std::shared_ptr and std::weak_ptr
C++20 Atomic std::shared_ptr and std::weak_ptr
진화 손11 vistas
C++20 Default member initializers for bit-fields por 진화 손
C++20 Default member initializers for bit-fieldsC++20 Default member initializers for bit-fields
C++20 Default member initializers for bit-fields
진화 손10 vistas
C++ 20 constexpr for algorithm and utility por 진화 손
C++ 20 constexpr for  algorithm and utilityC++ 20 constexpr for  algorithm and utility
C++ 20 constexpr for algorithm and utility
진화 손8 vistas
C++17 init-statements for if and switch por 진화 손
C++17 init-statements for if and switchC++17 init-statements for if and switch
C++17 init-statements for if and switch
진화 손9 vistas

C++20 Coroutine

  • 2. Coroutine 코루틴은 자신의 상태를 유지하면서 실행을 일시 정지하거나 재개할 수 있는 함수
  • 3. Coroutine 같은 스레드에서 제어권이 변경 되는 것이기 때문에 동기화 문제가 발생하지 않는다 쓰레드 보다 적은 비용이 든다 코루틴 객체는 힙에 생성이 된다 코루틴 객체의 수명에 유의 해야 한다 구현이 어렵다(C++, 개인적인 생각…)
  • 4. 코루틴을 적용할 수 없는 함수들 가변 인자 일반 return 문을 사용 constexpr, consteval 생성자, 소멸자 main
  • 5. 추가된 키워드 co_await 표현식 : 재개 될 때까지 일시 중지 std::size_t n = co_await socket.async_read_some(buffer(data)); co_yield 표현식 : 값을 반환하고 일시 중지 while (true) co_yield n++; co_return 문 : 값을 반환하고 끝낸다 co_return 7;
  • 6. 구현시 필요한 것들 promise "코루틴 내부"에서 관리 되는 객체. 코루틴의 결과나 예외를 이 객체를 통해 호출자에게 전달 하는 용도로 사용 코루틴 핸들 "코루틴 외부"에서 관리 되는 객체. 코루틴을 resume하거나 코루틴 프레임을 제거 할 때 사용 코루틴 프레임 "힙 메모리 영역"에 할당 되는 코루틴 상태를 나타내는 객체
  • 7. promise 아래의 멤버 함수 중 일부를 구현해야한다 구현한 함수는 컴파일러가 자동으로 호출한다
  • 8. 코루틴 핸들 promise_type이라는 내부 형식을 정의하고 있어야한다 직접 정의하거나 std::coroutine_traits를 Generator로 특수화한 std::coroutine_traits<Generator>를 public 형식 멤버 promise_type으로 두어도 된다.
  • 9. 코루틴 프레임 약속 객체, 코루인 인수들의 복사본, 정지 시점을 나타내는 객체, 내부의 지역 변수 등으로 구성됨 대기 가능 객체 코루틴이 일시정지 중인지 아닌지 판정 대기자 객체 대기 가능 객체가 종료 혹은 일시 정지 되길 기다리는 객체 co_await 연산자를 정의하거나 대기 가능 객체를 대기자 객체로 변환해야 한다
  • 10. 대기 가능 객체 Awaitable 콘셉트를 충족해야 함 정의 되어있는 std:: suspend_always 와 std::suspend_never 타입을 사용해도 된다
  • 14. 예제 코드 - 호출 순서