Kotlin Coroutine을 읽고 있으며 suspend
기능을 기반으로한다는 것을 알고 있습니다. 하지만 무슨 suspend
뜻일까요?
코 루틴 또는 함수가 일시 중단됩니까?
에서 https://kotlinlang.org/docs/reference/coroutines.html
기본적으로 코 루틴은 스레드를 차단하지 않고 일시 중단 할 수있는 계산입니다.
사람들이 종종 "기능 중지"라고 말하는 것을 들었습니다. 하지만 함수가 끝날 때까지 기다리기 때문에 일시 중단되는 것은 코 루틴이라고 생각합니다. "suspend"는 일반적으로 "작업 중단"을 의미하며이 경우 코 루틴이 유휴 상태입니다.
🤔 코 루틴이 일시 중단되었다고해야합니까?
어떤 코 루틴이 일시 중단됩니까?
에서 https://kotlinlang.org/docs/reference/coroutines.html
비유를 계속하기 위해 await ()는 일부 계산이 완료되고 결과를 반환 할 때까지 코 루틴을 일시 중단하는 일시 중단 함수 (따라서 비동기 {} 블록 내에서도 호출 가능) 일 수 있습니다.
async { // Here I call it the outer async coroutine
...
// Here I call computation the inner coroutine
val result = computation.await()
...
}
🤔 "계산이 완료 될 때까지 코 루틴을 일시 중단합니다"라고 말하지만 코 루틴은 경량 스레드와 같습니다. 따라서 코 루틴이 일시 중단되면 어떻게 계산을 수행 할 수 있습니까?
우리는 볼 await
에 호출 computation
이 될 수 있도록, async
그 수익률 Deferred
은 다른 코 루틴을 시작할 수있는 수단,
fun computation(): Deferred<Boolean> {
return async {
true
}
}
🤔 인용구 는 코 루틴을 중단 한다고 말합니다 . 그것은 suspend
외부 async
코 루틴을 의미합니까 , 아니면 suspend
내부 computation
코 루틴을 의미합니까 ?
합니까 suspend
평균이 외부 동안 async
코 루틴이 (대기 await
내부 용) computation
마무리에 코 루틴, 그것은 (외부 async
코 루틴) 스레드 풀에 아이들링 (그래서 이름이 일시 중단) 반환 스레드, 그리고이 때 아이의 computation
코 루틴 완료, 그것은 (외부 async
코 루틴을 ) 깨어나고 풀에서 다른 스레드를 가져와 계속합니까?
내가 스레드를 언급 한 이유는 https://kotlinlang.org/docs/tutorials/coroutines-basic-jvm.html 때문입니다.
코 루틴이 대기하는 동안 스레드가 풀로 반환되고 대기가 완료되면 코 루틴이 풀의 사용 가능한 스레드에서 다시 시작됩니다.