В каком из Flow есть обработка backpressure

«В каком из Flow есть обработка backpressure» — вопрос из категории Coroutines и Flow, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Flow в Kotlin Coroutines по умолчанию обрабатывает backpressure автоматически. Однако, есть три вида Flow:

  1. Cold Flow (обычный flow { ... }) – обрабатывает backpressure через приостановку эмиттера, если коллектор не успевает обрабатывать элементы.
    flow { 
        emit(1) // приостановится, если коллектор занят
        emit(2)
    }
  1. SharedFlow (MutableSharedFlow) – не поддерживает backpressure, так как работает в режиме "горячего" потока. Если коллектор не успевает, элементы теряются (зависит от replay и buffer).

  2. StateFlow (MutableStateFlow) – частный случай SharedFlow с единичным replay, тоже не поддерживает backpressure.

Вывод: Backpressure есть только в обычном Flow (cold). Для SharedFlow/StateFlow нужно управлять перегрузкой вручную (например, через buffer).