Estoy leyendo Kotlin Coroutine y sé que se basa en la suspend
función. ¿Pero qué suspend
significa?
¿Corutina o función se suspende?
De https://kotlinlang.org/docs/reference/coroutines.html
Básicamente, las corrutinas son cálculos que se pueden suspender sin bloquear un hilo.
Escuché que la gente suele decir "suspender la función". Pero creo que es la corrutina la que se suspende porque está esperando a que finalice la función. "suspender" normalmente significa "cesar la operación", en este caso la corrutina está inactiva.
🤔 ¿Deberíamos decir que la corrutina está suspendida?
¿Qué corrutina se suspende?
De https://kotlinlang.org/docs/reference/coroutines.html
Para continuar con la analogía, await () puede ser una función de suspensión (por lo tanto, también invocable desde dentro de un bloque async {}) que suspende una corrutina hasta que se realiza algún cálculo y devuelve su resultado:
async { // Here I call it the outer async coroutine
...
// Here I call computation the inner coroutine
val result = computation.await()
...
}
🤔 Dice "que suspende una corrutina hasta que se realiza algún cálculo", pero la corrutina es como un hilo ligero. Entonces, si se suspende la corrutina, ¿cómo se puede realizar el cálculo?
Vemos que await
está llamado computation
, por lo que podría ser async
que regrese Deferred
, lo que significa que puede iniciar otra corrutina
fun computation(): Deferred<Boolean> {
return async {
true
}
}
🤔 La cita dice que suspende una corrutina . ¿Significa suspend
la async
corrutina externa o suspend
la computation
corrutina interna ?
Hace suspend
media que mientras externa async
corrutina está a la espera ( await
) para el interior computation
corrutina a fin, él (el exterior async
corrutina) Idles (de ahí el nombre de suspensión) y los retornos de rosca a la agrupación de hebras, y cuando el niño computation
acabados co-rutina, él (el exteriorasync
corrutina ) se despierta, toma otro hilo de la piscina y continúa?
La razón por la que menciono el hilo es por https://kotlinlang.org/docs/tutorials/coroutines-basic-jvm.html
El hilo se devuelve al grupo mientras la corrutina está esperando, y cuando finaliza la espera, la corrutina se reanuda en un hilo libre en el grupo.