I'm reading Kotlin Coroutine and know that it is based on suspend
function. But what does suspend
mean?
Coroutine or function gets suspended?
From https://kotlinlang.org/docs/reference/coroutines.html
Basically, coroutines are computations that can be suspended without blocking a thread
I heard people often say "suspend function". But I think it is the coroutine who gets suspended because it is waiting for the function to finished? "suspend" usually means "cease operation", in this case the coroutine is idle.
Should we say the coroutine is suspended ?
Which coroutine gets suspended?
From https://kotlinlang.org/docs/reference/coroutines.html
To continue the analogy, await() can be a suspending function (hence also callable from within an async {} block) that suspends a coroutine until some computation is done and returns its result:
async { // Here I call it the outer async coroutine
...
// Here I call computation the inner coroutine
val result = computation.await()
...
}
It says "that suspends a coroutine until some computation is done", but coroutine is like a lightweight thread. So if the coroutine is suspended, how can the computation is done ?
We see await
is called on computation
, so it might be async
that returns Deferred
, which means it can start another coroutine
fun computation(): Deferred<Boolean> {
return async {
true
}
}
The quote say that suspends a coroutine. Does it mean suspend
the outer async
coroutine, or suspend
the inner computation
coroutine?
Does suspend
mean that while outer async
coroutine is waiting (await
) for the inner computation
coroutine to finish, it (the outer async
coroutine) idles (hence the name suspend) and returns thread to the thread pool, and when the child computation
coroutine finishes, it (the outer async
coroutine) wakes up, takes another thread from the pool and continues?
The reason I mention the thread is because of https://kotlinlang.org/docs/tutorials/coroutines-basic-jvm.html
The thread is returned to the pool while the coroutine is waiting, and when the waiting is done, the coroutine resumes on a free thread in the pool