Проверяет знание примитивов обмена данными между корутинами.
Channel в корутинах — это неблокирующая очередь для обмена элементов между корутинами, позволяющая отправителю и получателю работать независимо. Их используют для построения pipeline, fan-out/fan-in схем и взаимодействия producer/consumer без прямого вызова.
1. Объявление и основные операции:
val channel = Channel<Int>(capacity = Channel.UNLIMITED)
launch { for (i in 1..5) channel.send(i); channel.close() }
launch { for (v in channel) println(v) }2. Типы каналов:
Rendezvous (capacity=0)
Buffered (capacity>0)
Conflated (capacity=Channel.CONFLATED)
3. Использование:
Pipeline: конвейер обработки:
val c1 = produce { ... }
val c2 = produce { for(x in c1) send(process(x)) }Fan-in/fan-out: объединение нескольких Channels
4. Отличие от Flow:
Каналы для локальной связи корутин
Flow для декларативных стримов