구조화된 동시성 (부모-자식 관계의 특성)
- 자식은 부모로부터 컨텍스트 상속을 받음.
- 부모는 모든 자식이 작업을 마칠 때까지 기다림.
- 부모 코루틴이 취소되면 자식 코루틴도 취소됨.
- 자식 코루틴에서 에러가 발생하면, 부모 코루틴 또한 에러로 소멸됨.
- 자식이 부모로부터 컨텍스트를 물려받는건 코루틴 빌더의 가장 기본적인 특징임.
fun main() = runBlocking(CoroutineName("main")) {
val name = coroutineContext[CoroutineName]?.name
println(name) // main
launch {
delay(1000)
val name = coroutineContext[CoroutineName]?.name
println(name) // main
}
}
- 이외에 구조화된 동시성의 중요한 특성 중 세 가지는
Job
컨텍스트와 관련이 있음.
Job
은 코루틴을 취소하고, 상태를 파악하는 등 다양하게 사용될 수 있음.
Job이란 무엇인가?
- 코루틴의 실행을 제어하고 관리하면서 수명을 가지고 있음.
- Job은 인터페이스이긴 하지만 구체적인 사용법과 상태를 가지고 있다는 점에서 추상 클래스처럼 다룰 수도 있음.
- Job의 수명은 상태로 나타냄.
상태 |
isActive |
isCompleted |
isCancelled |
New(지연 시작될 때 시작 상태) |
false |
false |
false |
Active(시작 상태 기본값) |
true |
false |
false |
Completing(일시적인 상태) |
true |
false |
false |
Cancelling(일시적인 상태) |
false |
false |
true |
Cancelled(최종 상태) |
false |
true |
true |
Completed(최종 상태) |
false |
true |
false |
New
- 지연 시작되는 코루틴은 New 상태에서 시작됨.
- 코루틴이 본체를 실행하면 Active 상태로 가게 됨.
Active
- Active 상태에서는 잡이 실행되고 코루틴은 잡을 수행함.
- Job이 코루틴 빌더에 의해 생성되었을 때 코루틴의 본체가 실행되는 상태.
- 이 상태에서 자식 코루틴을 시작할 수 있음.
Completing