Scheduler
The goal of the Scheduler design pattern is to decouple what is being run from how it’s being run and optimize the use of resources when doing so.
In Kotlin, Dispatchers are an implementation of the Scheduler design pattern that decouples the coroutine (that is, the what) from underlying thread pools (that is, the how).
We’ve already seen dispatchers briefly in Chapter 6, Threads and Coroutines.
To remind you, the coroutine builders such as launch()
and async()
can specify which dispatcher to use. Here’s an example of how you specify it explicitly:
runBlocking {
// This will use the Dispatcher from the parent coroutine
launch {
// Prints: main
println(Thread.currentThread().name)
}
launch(Dispatchers.Default) {
// Prints DefaultDispatcher-worker-1
println(Thread.currentThread().name)
}
}
The default dispatcher creates as many threads in the underlying thread pool as you...