Channel — это примитив для конкурентности на основе корутин, который обеспечивает прямое взаимодействие между корутинами. Он работает аналогично блокирующей очереди, но использует функции suspend вместо блокировки потоков — конкретно send() и receive().
send(), который приостанавливается, если буфер канала заполненreceive(), который приостанавливается до момента появления элементаval channel = Channel<Int>()
launch { channel.send(42) }
launch { println(channel.receive()) }
| Функция | Channel | SharedFlow |
|---|---|---|
| Потребители | Один потребитель на элемент | Несколько коллекторов |
| Пропущенные события | Доставляются надёжно | Могут быть пропущены, если нет коллектора |
| Случай использования | Очереди задач, одноразовые события | Broadcasting состояния/событий |
Channel гарантирует доставку одному потребителю и идеален для producer-consumer паттернов. SharedFlow лучше подходит для broadcasting событий нескольким подписчикам одновременно.
Channel использует suspend функции для операций send() и receive(), предотвращая блокировку потока во время ожидания доступности данных или освобождения места в буфере.
Новый — ещё не проверен сообществом
Вы