Вопрос объясняет, почему CPU-ориентированный диспетчер плох для I/O-операций.
Dispatchers.Default имеет мало потоков (по числу ядер CPU). Если все они заблокированы I/O-операциями, новые задачи будут ждать, снижая производительность.
Default для I/O:Блокировка потоков:
Сетевой запрос блокирует поток на 1–5 секунд.
Если потоков 4 (например, на 4-ядерном CPU), 4+ запроса создадут очередь.
Пример:
// Плохо: блокирует Default-потоки
launch(Dispatchers.Default) {
val data = blockingHttpCall() // 2 сек ожидания
}Решение – Dispatchers.IO:
Создаёт дополнительные потоки для I/O.
launch(Dispatchers.IO) {
val data = blockingHttpCall() // Не мешает CPU-задачам
}Вывод:
Для I/O всегда используйте Dispatchers.IO.