私はコトリンコルーチンを読んでいて、それがsuspend
機能に基づいていることを知っています。しかし、どういうsuspend
意味ですか?
コルーチンまたは関数が中断されますか?
https://kotlinlang.org/docs/reference/coroutines.htmlから
基本的に、コルーチンはスレッドをブロックせずに中断できる計算です
「サスペンド機能」とよく言われます。しかし、関数が終了するのを待っているので中断されるのはコルーチンだと思いますか?「一時停止」は通常「操作を停止する」ことを意味します。この場合、コルーチンはアイドル状態です。
weコルーチンは一時停止されていると言えますか?
どのコルーチンが一時停止されますか?
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
}
}
quote コルーチンを一時停止するという引用。それsuspend
は外側のasync
コルーチン、またはsuspend
内側のcomputation
コルーチンを意味しますか?
いsuspend
ながら、外側のことを意味しasync
コルーチンが(待っているawait
内側のために)computation
それ(アウター、仕上げにコルーチンasync
コルーチン)スレッドプールには空転(名前の由来は、サスペンド)と戻り、スレッド、および時に子computation
コルーチンが終了すると、それは(外async
コルーチン)ウェイクアップし、プールから別のスレッドを取得して続行しますか?
スレッドについて言及する理由は、https://kotlinlang.org/docs/tutorials/coroutines-basic-jvm.htmlが原因です。
コルーチンが待機している間にスレッドがプールに返され、待機が完了すると、コルーチンはプール内の空きスレッドで再開します。