Estou lendo Kotlin Coroutine e sei que é baseado em suspend
funções. Mas o que isso suspend
significa?
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 async
que 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 suspend
a async
co-rotina externa ou suspend
a computation
co-rotina interna ?
Faz suspend
média que, enquanto exterior async
co-rotina está esperando ( await
) para o interior computation
coroutine ao fim, ele (o exterior async
coroutine) idles (daí o nome suspensão) e retornos de rosca para o pool de threads, e quando a criança computation
coroutine acabamentos, ele (o exterior async
coroutine ) 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