-
Notifications
You must be signed in to change notification settings - Fork 23
How coroutines programming works
Devrath edited this page Dec 30, 2023
·
5 revisions
The Idea of coroutines revolves around the idea of
suspension points
suspendable functions
continuations
Let us consider a sample
fun getMovieDetails(userId: String) {
print("Getting the movie details") // 1
val movieDetails = sampleMovieService.getMovie(userId) // 2
print("Getting the movie details") // 3
print(movieDetails.movieName) // 4
print("Movie details displayed") // 5
}
-
1
is executed ->2
gets suspended -> then3
,4
,5
gets executed one after another. - So
2
calls a suspending function and waits for it to return before3
,4
,5
is executed. - Important thing to notice here is that there is no
callback
andstreams
. - Also
2
once suspended is wrapped in a suspend function and added to the thread pool -> It might execute quickly of its waiting to execute -> further lines are executed -> Until the suspended variable is used which we callawait
-> if still hasn't executed it suspends the entire program and waits for suspended function to execute - Meaning we can do as much as processing in between the call and using the result of that call because the compiler knows about
suspending functions
andsuspending points
-> so you can think they are working sequentially and have a clean code. which is extendable and easy to maintain. - Since the
coroutines
are so simple, because of this we can chain them and combine them, unlike other operators. - Also an important point to note is that coroutines are not threads, They are low level mechanisms that use thread pools to shuffle work between multiple existing threads -> This allows us to create a million coroutines without memory overhead otherwise if coroutines were threads even in the modern computers would crash.