Structured Concurrency in Coroutines

2025. 1. 19. 13:00·Study/Kotlin
728x90
반응형

이번 글에서는 구조적 동시성(Structured Concurrency)의 특징을 정리해본다.

 

1. 모든 코루틴은 제한된 수명이 있는 위치에서 시작되어야 한다.

가장 대표적인 예로 Activity가 될 수 있다.

 

RxJava에서는 특정 시점에서 disposable을 모아 처리해야 하는데

컴파일러는 개발자가 처리하는 코드를 작성하지 않아도 경고하지 않는다.

 

이렇게 clear 혹은 cancel의 과정이 없다면

OOM(Out Of Memory) 에러 혹은 앱 크래시가 발생할 수 있을 것이다.

 

반면에 코루틴을 사용할 때 예시로 사용했던 코드를 보면 viewModelScope가 있다.

 

이 스코프는 ViewModel 수명에 엮여있다.

 

따라서 ViewModel이 수명에 따라 clear될 때,

viewModelScope에서 실행되었던 코루틴은 같이 취소된다.

 

2. 같은 스코프에서 실행되는 코루틴은 부모-자식 관계를 형성한다.

정확히 따지면 코루틴 자체가 이런 관계를 형성하는 것이 아닌 Job 객체가 이런 관계를 형성한다.

Job Hierarchy

 

3. 부모 Job은 자식 Job이 완료될 때까지 완료되지 않는다.

위 그림을 예로 들면, Job3가 완료될 때까지 Job2는 완료되지 않는다.

 

또 Job1, Job2가 완료될 때까지 Job0는 완료되지 않는다.

 

4. 부모 Job을 취소하면 모든 자식 Job이 취소된다.

자식 Job을 취소해도 부모나 형제 Job은 취소되지 않는다.

 

다시 위 그림을 예로 들면, Job1을 취소해도 Job2는 취소되지 않는다.

 

또 Job3를 취소해도 Job2는 취소되지 않는다.

 

5. Job 타입에 따라 자식 Coroutine에서 에러가 발생하면
다른 형제 Coroutine에게 에러가 전파될 수 있다.

일반적인 경우, 자식 Job에서 에러가 발생하면 부모 Job에 에러가 전파되어 모든 자식 Job이 취소된다.

(4번에서 설명했듯이)

 

하지만, 부모 Job이 SupervisorJob인 경우

자식 Job에서 에러가 발생해도 다른 자식 Job이 취소되지 않는다.

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Study > Kotlin' 카테고리의 다른 글

ViewModelScope 알아보기  (1) 2025.02.25
GlobalScope 알아보기  (0) 2025.02.17
Coroutines 여러 개로 연산 속도 높이기  (1) 2024.11.22
CoroutineScope와 CoroutineContext 되짚어보기  (0) 2024.09.21
withContext로 스레드 전환하기  (0) 2024.09.18
'Study/Kotlin' 카테고리의 다른 글
  • ViewModelScope 알아보기
  • GlobalScope 알아보기
  • Coroutines 여러 개로 연산 속도 높이기
  • CoroutineScope와 CoroutineContext 되짚어보기
BonusTrack02.dev
BonusTrack02.dev
공부, 일상
  • BonusTrack02.dev
    BonusTrack02.dev
    BonusTrack02.dev
  • 전체
    오늘
    어제
    • 분류 전체보기 (241) N
      • Dev experience (88) N
        • Android (87) N
        • Kotlin (1)
      • Study (64)
        • Kotlin (28)
        • Swift (17)
        • Java (19)
      • 프로그래머스 (68)
      • 주저리주저리 (21)
        • 카페 (5)
        • 음식점 (4)
        • 컨퍼런스 (1)
        • 팝업스토어 (4)
        • 전시회 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    스위프트
    SWIFT
    getNumericValue
    aac
    programmers
    CodeLab
    ViewModel
    coroutines
    프로그래머스
    코루틴
    안드로이드
    PCCE
    viewModelScope
    MVVM
    LiveData
    android
    ios
    Kotlin
    티스토리챌린지
    자바
    daterangepicker
    배열
    오블완
    Observer
    room
    Material
    jetpack
    databinding
    Java
    코틀린
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
BonusTrack02.dev
Structured Concurrency in Coroutines
상단으로

티스토리툴바