코루틴이 GlobalScope에서 시작되면 프로그램은 코루틴의 종료를 보장하지 않는다.
코루틴의 종료를 보장하기 위해서 부모-자식 관계를 생성하고, 부모는 모든 자식이 작업을 마칠 때까지 중단된 상태로 기다리는데 이런 관계를 구조화된 동시성이라 부른다.
main
함수에서 runBlocking
빌더로 시작된 코루틴에서 this.launch
나 this.async
빌더로 자식 코루틴을 실행하는 것이 대표적인 예시이다.
launch
를 GlobalScope로 시작하면 딜레이를 주어야만 main 함수가 lauch
의 종료를 기다린다.
이에 반해 launch
가 부모(this
)에서 시작되면 자식으로 관계가 만들어져 별도의 딜레이 필요없이 종료를 기다린다.