Как примитив `Channel` в Kotlin облегчает коммуникацию между корутинами, и чем он отличается от `SharedFlow` с точки зрения сценариев использования? — ДейлиПреп