Scope Builder
- 다른 builder들에서 제공하는 Coroutine Scope 외에도, Coroutine Scope 빌더를 활용하여 고유한 scope을 선언할 수 있다.
- coroutineScope는 자식 Coroutine 들의 실행이 모두 완료될 때까지 종료되지 않는 Coroutine Scope을 생성한다.
- runBlocking의 경우에는 대기를 위해 현재 Thread를 Block 시키는 반면, coroutineScope는 다른 작업이 수행될 수 있도록 작업 중이던 스레드의 자원 사용을 해제한다는 차이가 있다.
fun main() = runBlocking {
doWorld()
}
suspend fun doWorld() = coroutineScope { // this: CoroutineScope
launch {
delay(1000L)
println("World!")
}
println("Hello")
}
Scope Builder와 동시성
- coroutineScope builder은 일시 중단 함수 내부에서 복수의 동시 작업을 수행하기 위해 사용될 수 있다.
fun main() = runBlocking {
doWorld()
println("Done")
}
// 두 섹션들을 모두 동시적으로 실행합니다
suspend fun doWorld() = coroutineScope { // this: CoroutineScope
launch {
delay(2000L)
println("World 2")
}
launch {
delay(1000L)
println("World 1")
}
println("Hello")
}
- 동시 실행이기 때문에 1초 후 World 1이 출력되고 그다음 1초 후에 World 2가 출력된다.
Hello
World 1
World 2
Done
Job 명시적으로 사용하기
- launch Coroutine builder는 실행된 Coroutine을 처리하고 완료를 명시적으로 기다리도록 하는 데 사용할 수 있는 Job 객체를 반환한다.
fun main() = runBlocking {
val job = launch { // 새로운 코루틴을 실행하고 그 Job에 대한 참조를 유지한다
delay(1000L)
println("World!")
}
println("Hello")
job.join() // 자식 코루틴이 완료될 때까지 기다린다.
println("Done")
}
Coroutines는 경량(light-weight)이다.
- Coroutines는 JVM의 Thread들보다 덜 리소스 집약적이다. Thread를 사용할 때 JVM의 가용 메모리를 소진시키는 코드는 Coroutine을 사용하여 리소스의 제한치에 도달하지 않도록 표현될 수 있다.
- 단순히 스레드를 생성하여 사용하는 것보다 훨씬 많은 메모리 사용량을 절약할 수 있다.
Scope Builder
- 다른 builder들에서 제공하는 Coroutine Scope 외에도, Coroutine Scope 빌더를 활용하여 고유한 scope을 선언할 수 있다.
- coroutineScope는 자식 Coroutine 들의 실행이 모두 완료될 때까지 종료되지 않는 Coroutine Scope을 생성한다.
- runBlocking의 경우에는 대기를 위해 현재 Thread를 Block 시키는 반면, coroutineScope는 다른 작업이 수행될 수 있도록 작업 중이던 스레드의 자원 사용을 해제한다는 차이가 있다.
fun main() = runBlocking {
doWorld()
}
suspend fun doWorld() = coroutineScope { // this: CoroutineScope
launch {
delay(1000L)
println("World!")
}
println("Hello")
}
Scope Builder와 동시성
- coroutineScope builder은 일시 중단 함수 내부에서 복수의 동시 작업을 수행하기 위해 사용될 수 있다.
fun main() = runBlocking {
doWorld()
println("Done")
}
// 두 섹션들을 모두 동시적으로 실행합니다
suspend fun doWorld() = coroutineScope { // this: CoroutineScope
launch {
delay(2000L)
println("World 2")
}
launch {
delay(1000L)
println("World 1")
}
println("Hello")
}
- 동시 실행이기 때문에 1초 후 World 1이 출력되고 그다음 1초 후에 World 2가 출력된다.
Hello
World 1
World 2
Done
Job 명시적으로 사용하기
- launch Coroutine builder는 실행된 Coroutine을 처리하고 완료를 명시적으로 기다리도록 하는 데 사용할 수 있는 Job 객체를 반환한다.
fun main() = runBlocking {
val job = launch { // 새로운 코루틴을 실행하고 그 Job에 대한 참조를 유지한다
delay(1000L)
println("World!")
}
println("Hello")
job.join() // 자식 코루틴이 완료될 때까지 기다린다.
println("Done")
}
Coroutines는 경량(light-weight)이다.
- Coroutines는 JVM의 Thread들보다 덜 리소스 집약적이다. Thread를 사용할 때 JVM의 가용 메모리를 소진시키는 코드는 Coroutine을 사용하여 리소스의 제한치에 도달하지 않도록 표현될 수 있다.
- 단순히 스레드를 생성하여 사용하는 것보다 훨씬 많은 메모리 사용량을 절약할 수 있다.