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