Coroutines under the hood
We’ve highlighted some key facts about coroutines several times:
- Coroutines are akin to lightweight threads. They consume fewer resources compared to regular threads, enabling the creation of more concurrent tasks.
- Unlike traditional threads that block the entire thread when waiting for an operation to complete, coroutines suspend themselves, allowing the underlying thread to execute other tasks in the meantime.
But how exactly do coroutines work? Let’s explore the mechanics using an example:
class Blocking {
companion object {
fun profile(id: String): Profile {
val bio = fetchBioOverHttp(id) // takes 1s
val picture = fetchPictureFromDB(id) // takes 100ms
val friends = fetchFriendsFromDB(id) // takes 500ms
return Profile(bio, picture, friends)
}
private fun fetchFriendsFromDB(id: String): List<String> {
Thread.sleep(500...