코루틴 스코프 빌더 사용
coroutineScope 일시 중단 기능 내에서 빌더를 사용하여 동시에 여러 작업을 수행할 수 있습니다.
doWorld suspend 함수 내에서 두 개의 동시 코루틴을 실행해 봅시다.
import kotlinx.coroutines.*
// doWorld와 "Done"을 순서대로 실행합니다.
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")
}
완전한 코드는 여기에서 찾을 수 있습니다
시작 블록 { … } 내 두 개의 코드가 동시에 실행되어 “World 1″이 1초 후에 먼저 출력되고 “World 2″가 2초 후에 출력됩니다.
doWorld의 coroutineScope는 둘 다 완료된 후에 종료되며, 그 후에야 doWorld가 반환되고 문자열 “Done”이 인쇄됩니다.
Hello
World 1
World 2
Done
다음 내용은 독자의 이해를 돕기 위해 번역자가 추가한 내용입니다.
*하나. 중괄호 { … } 안의 코드.
*2. 꼬마 코 루틴을 의미합니다.
*삼. 이전 코드는 다음과 같습니다.
import kotlinx.coroutines.*
fun main() = runBlocking {
launch {
delay(1000L)
println("World!
")
}
println("Hello")
}
이 문서는 공식 코루틴 문서를 번역한 것입니다.
원래의: 코루틴 기본 사항 – 범위 작성기 , 코루틴 기본 사항 – 범위 작성기 및 동시성
원본 텍스트의 최종 편집: 2022년 6월 27일
코루틴 작업을 명시적으로 사용
시작하다 Coroutine Builder는 실행 중인 코루틴을 처리하고 완료될 때까지 명시적으로 기다리는 데 사용할 수 있습니다.
일하다 객체 반환 예를 들어 하위 코루틴이 완료될 때까지 기다린 다음 문자열 “Done”을 인쇄할 수 있습니다.
import kotlinx.coroutines.*
fun main() = runBlocking {
val job = launch { // 새로운 코루틴을 실행하고 그 Job에 대한 참조를 유지한다
delay(1000L)
println("World!
")
}
println("Hello")
job.join() // 자식 코루틴이 완료될 때까지 기다린다.
println("Done")
}
완전한 코드는 여기에서 찾을 수 있습니다
Hello
World!
Done
이 문서는 공식 코루틴 문서를 번역한 것입니다.
원래의: 코루틴 기초 – 명시적 작업
원본 텍스트의 최종 편집: 2022년 6월 27일
코루틴은 가볍다
코루틴은 JVM 스레드보다 리소스 집약도가 낮습니다.
쓰레드를 사용할 때 JVM의 가용 메모리를 소진시키는 코드는 리소스 제한에 도달하지 않도록 코루틴을 사용하여 표현할 수 있다.
예를 들어, 다음 코드는 100,000개의 개별 코루틴을 실행하며 각각 5초 동안 대기하고 매우 적은 메모리를 사용하면서 마침표(‘.)를 인쇄합니다.
import kotlinx.coroutines.*
fun main() = runBlocking {
repeat(100_000) { // 많은 수의 코루틴을 실행한다.
launch {
delay(5000L)
print(".")
}
}
}
완전한 코드는 여기에서 찾을 수 있습니다
스레드를 사용하여 위의 프로그램을 작성하면(runBlocking 제거, 시작을 스레드로 대체, 지연을 Thread.sleep으로 대체) 많은 메모리를 소비하고 메모리 고갈을 유발합니다.
이 문서는 공식 코루틴 문서를 번역한 것입니다.
원본 텍스트의 최종 편집: 2022년 6월 27일