fun main() = runBlocking {
launch {
delay(1000L)
println("World!")
}
println("Hello")
}
launch
1. 코루틴 Builder
2. 새로운 코루틴을 동시적으로 실행시킨다.
3. 작업이 독립적으로 수행된다.
4. CoroutineScope에서만 명시돼야 한다.
delay
1. 특정 시간 동안 코루틴을 중단시키는 역할
runBlocking
1. 코루틴 Builder
2. runBlocking 내부에 있는 모든 코루틴의 동작이 완료될 때까지 블록킹된다.
명확하게 어떤 의미인지 살펴볼 필요성이 있음
suspend 키워드를 이용하여 delay를 사용할 수 있고 이를 통해 함수화 시킬 수 있다.
fun main() = runBlocking {
launch {
doWorld()
}
println("Hello")
}
//suspend 키워드가 없으면 delay를 사용할 수 없다
suspend fun doWorld(){
delay(1000L)
println("World!")
}
runBlocking와 corountineScope 특징
무슨 말인지 차차 배워나아가면서 알아봐야겠다
fun main() = runBlocking {
doWorld()
println("done")
}
suspend fun doWorld() = coroutineScope{
launch {
delay(2000L)
println("World 2")
}
launch {
delay(1000L)
println("World 1")
}
println("Hello")
}
launch 블록들은 동시에 실행이 된다.
fun main() = runBlocking{
val job = launch{
delay(1000L)
println("World!")
}
println("Hello")
job.join() //자식 코루틴이 완료될때까지 기다린다.
println("Done")
}
fun main() = runBlocking{
repeat(100_000){
launch {
delay(5000L)
print(".")
}
}
}
코루틴은 경량하다. 10만개의 코루틴을 생성하여 점을 찍어도 out of memory 현상 없이 점이 찍히는 것을 확인할 수 있다.