Coroutine Dispatchers — это механизм, управляющий тем, на каком(-их) потоке(-ах) или в каком пуле будет выполняться корутина. Dispatcher — это часть контекста корутины (CoroutineContext), элемент CoroutineContext.Element, задающий CoroutineDispatcher.
Если при запуске корутины не задан явный dispatcher, используется контекст родителя или Dispatchers.Default
Основные виды встроенных Dispatcher‑ов:
- Dispatchers.Main — Запуск на UI/главном потоке (Android, Swing, JavaFX) — используется для работы с интерфейсом пользователя (обновление интерфейса).
- Dispatchers.Default — Оптимизирован для CPU‑интенсивных задач (обработка, вычисления) — пул рабочих потоков. Тяжёлые вычисления (агрегация, сортировка, парсинг).
- Dispatchers.IO — Оптимизирован для I/O‑операций (файлы, сеть, база данных) — пул потоков с более высокой ёмкостью. Блокирующие/длительные операции (чтение/запись, сеть).
- Dispatchers.Unconfined — Не привязан к конкретному потоку: запускается на текущем, а при возобновлении — возможно на другом; используется редко. Если задача не зависит от потока и короткая, то нужно использовать очень осторожно.
- newSingleThreadContext(«Name») — Создаёт dispatcher, который использует один конкретный поток с именем.
- Пользовательские (custom) dispatcher — Можно создавать свои через
Executors,FixedThreadPool, и преобразовывать в dispatcher.