Estou lendo Kotlin Coroutine e sei que é baseado em suspendfunções. Mas o que isso suspendsignifica?
A co-rotina ou função é suspensa?
De https://kotlinlang.org/docs/reference/coroutines.html
Basicamente, co-rotinas são cálculos que podem ser suspensos sem bloquear um thread
Já ouvi muitas pessoas dizerem "suspender função". Mas acho que é a co-rotina que fica suspensa porque está esperando a função terminar? "suspender" geralmente significa "cessar operação", neste caso a co-rotina está ociosa.
🤔 Devemos dizer que a co-rotina está suspensa?
Qual corrotina é suspensa?
De https://kotlinlang.org/docs/reference/coroutines.html
Para continuar a analogia, await () pode ser uma função de suspensão (portanto, também pode ser chamada de dentro de um bloco {} assíncrono) que suspende uma co-rotina até que algum cálculo seja feito e retorne seu resultado:
async { // Here I call it the outer async coroutine
...
// Here I call computation the inner coroutine
val result = computation.await()
...
}
🤔 Diz "que suspende uma co-rotina até que algum cálculo seja feito", mas a co-rotina é como uma thread leve. Portanto, se a co-rotina for suspensa, como o cálculo pode ser feito?
Vemos que awaité chamado computation, então pode ser asyncque retorne Deferred, o que significa que pode iniciar outra co-rotina
fun computation(): Deferred<Boolean> {
return async {
true
}
}
🤔 A citação diz que suspende uma co-rotina . Significa suspenda asyncco-rotina externa ou suspenda computationco-rotina interna ?
Faz suspendmédia que, enquanto exterior asyncco-rotina está esperando ( await) para o interior computationcoroutine ao fim, ele (o exterior asynccoroutine) idles (daí o nome suspensão) e retornos de rosca para o pool de threads, e quando a criança computationcoroutine acabamentos, ele (o exterior asynccoroutine ) acorda, pega outro thread do pool e continua?
Menciono o tópico por causa de https://kotlinlang.org/docs/tutorials/coroutines-basic-jvm.html
O encadeamento é retornado ao conjunto enquanto a co-rotina está esperando e quando a espera é concluída, a co-rotina é retomada em um encadeamento livre no conjunto
