Ответ
Каналы (Channel) и Flow — это разные инструменты Kotlin Coroutines для работы с асинхронными потоками данных.
Каналы (Channel):
- Горячие потоки: данные начинают передаваться сразу, даже если нет подписчика.
- Поддерживают несколько подписчиков, но каждый элемент потребляется только одним.
- Используются для коммуникации между корутинами (например,
send/receive).
val channel = Channel<Int>()
launch { channel.send(1) }
launch { println(channel.receive()) } // 1
Flow:
- Холодные потоки: данные начинают передаваться только при вызове
collect. - Поддерживают трансформации (map, filter) и могут быть перезапущены.
- Не хранят состояние, каждый
collectзапускает поток заново.
flow { emit(1) }.collect { println(it) } // 1
Итог: Channel — для обмена данными между корутинами, Flow — для реактивных потоков с трансформациями.