Что закрывает канал kotlinx.coroutines

Что закрывает канал kotlinx.coroutines, используя channel.close(), и каков будет отрицательный эффект от ручного закрытия каналов? Если я не закрою канал вручную, будет какая-то ненужная обработка? Будет ли ссылка на канал где-нибудь, что мешает ей быть GCd? Или функция закрытия просто существует как способ информирования потенциальных пользователей канала о том, что ее больше нельзя использовать.

(Вопрос отправлен с форума Kotlin https://discuss.kotlinlang.org/t/closing-coroutine-channels/2549)

Ответ 1

Закрытие канала концептуально работает, отправив специальный "токен" по этому каналу. Вы закрываете канал, когда у вас есть конечная последовательность элементов, которые будут обрабатываться потребителями, и вы должны сообщить потребителям, что эта последовательность закончена. Вам не нужно закрывать канал иначе.

Каналы не привязаны к какому-либо собственному ресурсу, и их не нужно закрывать, чтобы освободить их память. Просто удалить все ссылки на канал в порядке. GC придет, чтобы очистить его.