Dispatchers.IO. This is designed for background work that may potentially block, such as disk I/O or network I/O.
In Kotlin/JVM, this dispatcher does not have its own thread pool. Instead, it shares a thread pool with Dispatchers.Default. However, Dispatchers.IO has different logic at the level of the dispatcher for using that thread pool, taking into account the limited actual parallelism that may be going on due to the blocking nature of the work.