Je lis Kotlin Coroutine et je sais qu'il est basé sur la suspend
fonction. Mais qu'est-ce que ça suspend
veut dire?
Coroutine ou fonction suspendue?
De https://kotlinlang.org/docs/reference/coroutines.html
Fondamentalement, les coroutines sont des calculs qui peuvent être suspendus sans bloquer un thread
J'ai souvent entendu les gens dire "suspendre la fonction". Mais je pense que c'est la coroutine qui est suspendue car elle attend que la fonction soit terminée? "suspendre" signifie généralement "arrêter l'opération", dans ce cas la coroutine est inactive.
🤔 Doit-on dire que la coroutine est suspendue?
Quelle coroutine est suspendue?
De https://kotlinlang.org/docs/reference/coroutines.html
Pour continuer l'analogie, await () peut être une fonction de suspension (donc également appelable depuis un bloc async {}) qui suspend une coroutine jusqu'à ce qu'un calcul soit fait et renvoie son résultat:
async { // Here I call it the outer async coroutine
...
// Here I call computation the inner coroutine
val result = computation.await()
...
}
🤔 Il dit "qui suspend une coroutine jusqu'à ce qu'un calcul soit fait", mais la coroutine est comme un thread léger. Donc, si la coroutine est suspendue, comment faire le calcul?
Nous voyons await
est appelé computation
, donc il se peut que async
cela retourne Deferred
, ce qui signifie qu'il peut démarrer une autre coroutine
fun computation(): Deferred<Boolean> {
return async {
true
}
}
🤔 La citation dit que suspend une coroutine . Cela signifie-t-il suspend
la async
coroutine externe ou suspend
la computation
coroutine interne ?
Cela suspend
signifie que pendant que la async
coroutine externe attend ( await
) que la computation
coroutine interne se termine, elle (la async
coroutine externe ) est inactive (d'où le nom suspend) et renvoie le thread au pool de threads, et lorsque la computation
coroutine enfant se termine, elle (la async
coroutine externe) ) se réveille, prend un autre thread du pool et continue?
La raison pour laquelle je mentionne le fil est à cause de https://kotlinlang.org/docs/tutorials/coroutines-basic-jvm.html
Le thread est renvoyé dans le pool pendant que la coroutine est en attente, et lorsque l'attente est terminée, la coroutine reprend sur un thread libre dans le pool