탐비의 개발 낙서장

[Kotlin] 코틀린 Coroutine 동작 본문

프로그래밍/Kotlin

[Kotlin] 코틀린 Coroutine 동작

탐비_ 2021. 8. 5. 23:33
Coroutine 구조

 

동기 프로그래밍의 루틴

 

코루틴 프로그래밍의 루틴

 

 일반적으로 사용했던 GlobalScope launch라는 코루틴 빌더는 launch하도록 했다. 이 말은 Global이 의미하는 것 처럼, 새롭게 launch된 코루틴은 해당 어플리케이션 전체의 생명주기에 적용된다는 말이 됩니다.

 

 runBlocking을 사용하는 것 역시 새로운 코루틴을 생성하는 것으로, 해당 상황에서 자신이 속한 스레드를 블로킹시켜 코루틴 작업이 지속될 수 있도록 합니다.

 

 job은 어떠한 코루틴의 생명주기에 일을 처리하고 종료하기 위해 사용됩니다. 상위 코루틴에 join을 하게되면 해당 코루틴이 제 기능을 다 완수할 때 까지 코루틴이 기다리게 됩니다.

 

 suspend와 resume은 콜백을 대체하기 위해 같이 쓰입니다.

suspend와 resume동작 이미지

 

 주의할 점은 suspend를 적어준다고 해서 함수를 백그라운드 스레드에서 실행시킨다는 뜻은 아닙니다. 코루틴은 기본적으로 메인 스레드 위에서 돌게되며, 너무 오래 걸리는 작업을 하기 위해서는 코루틴을 Default 또는 IO Dispatcher에 의해 관리되도록 해야합니다.

 메인 스레드 위에서 실행되더라도 꼭 Dispatcher에 의해 동작해야 합니다. 어떤 스레드에서 해당 코루틴을 실행할지 명시하기 위해, 개발자가 선택하여 Dispather를 지정해 주게 됩니다.

 

Coroutine 사용하기

 

 

 

 

Coroutine 디버깅

 

 Build -> Edit Configuration -> VM Options [-Dkotlinx.coroutines.debug] 추가 하면 실행 스레드 + 코루틴 확인이 가능합니다.

fun <T>println(msg: T){ kotlin.io.println("$msg [${Thread.currentThread().name}]") }