[코틀린기초] 36. 코루틴 개념 및 launch 빌더
코루틴
스레드와 달리 코틀린은 코루틴을 통해 복잡성을 줄이고도 손쉽게 일시 중단하거나 다시 시작하는 루틴을 만들어낼 수 있다.
멀티태스킹을 실현하면서 가벼운 스레드라고도 불림
코루틴은 컨텍스트 스위칭 없이(코루틴은 스택이 없다) 해당 루틴을 일시중단(suspend)을 통해 제어
스레드 하나에 여러 코루틴이 존재할 수 있어서 스레드보다 더 작은 단위이다.
코루틴 빌더
launch
일단 실행하고 잊어버리는 형태의 코루틴으로 메인 프로그램과 독립되어 실행할 수 있다.
기본적으로 즉시 실행하며, 블록내 실행 결과는 반환하지 않는다.
상위 코드를 블록시키지 않고 관리를 위한 Job 객체를 즉시 반환한다.
join을 통해 상위 코드가 종료되지않고 완료를 기다리게 할 수 있다.
async
비동기 호출을 위해 만든 코루틴으로 결과나 예외를 반환한다.
실행 결과는 Deffered
await은 작업이 완료될 때까지 기다리게 된다.
기본적인 빌더의 사용
import kotlinx.coroutines.*
fun main(){
GlobalScope.launch{ // 새로운 코루틴을 백그라운드에 실행
delay(1000L) // 논-블록킹
println("World!") // 지연 후 출력
}
println("Hello,") // main스레드가 코루틴이 지연되는 동안 계속 실행
Thread.sleep(2000L) // main스레드가 jvm에서 바로 종료되지 않게 기다림 (블록킹)
}
#### suspend 키워드를 사용하면 사용자가 중단 및 재개가 가능한 함수를 만들 수 있다.
suspend fun doSomething(){
println("hello!")
}
#### 단, suspend 함수는 코루틴 블록 안에서만 사용되어야 한다!
컴파일러는 suspend가 붙은 함수를 자동적으로 추출해 Continuation 클래스로부터 분리된 루틴을 만든다