import kotlinx.coroutines.*
fun main() = runBlocking {
launch { // 백그라운드에서 새 코루틴 시작
delay(1000)
println("World!")
}
println("Hello")
}
출력결과
Hello
World!
// 1초후에 World!가 출력됨
launch
: Coroutine Builder이고, 독립적으로 동작하는 새로운 코루틴을 나머지 코드와 동시에 실행되도록 함.
launch
코드블록과 println("Hello")
를 동시에 실행함.launch
블록으로 감싸면 비동기로 실행이 됨.delay
: 일시중단 함수임. 이는 코루틴을 지정한 시간동안 일시중단함.
delay
함수가 호출되면, 일시 중단되는 동안 다른 코루틴이 실행되도록 양보함.delay
함수는 코루틴을 다시 활성화하고 중단 지점부터 다시 재개됨.runBlocking
: Coroutine Builder이고, 블록내의 코드를 다 수행할때까지 현재 스레드를 블록시킴.
구조화된 동시성
임.runBlocking
: 부모launch
: 자식runBlocking
이 해당 스코프를 만들며, 1초를 기다린후 종료되는 이유임.구조화된 동시성
은 코루틴들이 손실되거나 누수를 일으키지 않도록 함.
suspend
키워드를 붙여 함수를 작성함.delay
, 다른 susepnd
함수.
delay
도 일시중단함수임.import kotlinx.coroutines.*
fun main() = runBlocking {
launch { doWorld() }
println("Hello")
}
suspend fun doWorld() {
delay(1000)
println("World!")
}
coroutineScope
빌더를 사용하여 고유한 스코프를 선언할 수 있음.
runBlocking
과 차이점은 delay
함수 호출 시 Thread를 블록 시키는 방면 coroutineScope
는 다른 작업이 수행될 수 있도록 코루틴을 일시정지함.
runBlocking
은 일반 함수 coroutineScope
는 일시 중단 함수임.import kotlinx.coroutines.*
fun main() = runBlocking {
doWorld()
}
suspend fun doWorld() = coroutineScope{
launch {
delay(1000L)
println("World!")
}
println("Hello")
}