Je lis Kotlin Coroutine et je sais qu'il est basé sur la suspendfonction. Mais qu'est-ce que ça suspendveut 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 awaitest appelé computation, donc il se peut que asynccela 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 suspendla asynccoroutine externe ou suspendla computationcoroutine interne ?
Cela suspendsignifie que pendant que la asynccoroutine externe attend ( await) que la computationcoroutine interne se termine, elle (la asynccoroutine externe ) est inactive (d'où le nom suspend) et renvoie le thread au pool de threads, et lorsque la computationcoroutine enfant se termine, elle (la asynccoroutine 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
