Junior — Middle
Popište situaci, kdy jste se setkali s mechanismem backpressure v systému nebo aplikaci.
sobes.tech AI
Odpověď od AI
Backpressure je mechanismus řízení toku dat, který zabraňuje přetížení spotřebitele, pokud nedokáže zpracovat příchozí data stejnou rychlostí, s jakou přicházejí.
Například v Androidu s RxJava, pokud Observable generuje události rychleji, než je Subscriber schopen zpracovat, dochází k backpressure. Bez správného ošetření může dojít k OutOfMemoryError nebo pádu aplikace.
Pro zvládnutí toho lze použít operátory RxJava jako onBackpressureBuffer(), onBackpressureDrop() nebo onBackpressureLatest(), které regulují tok dat, bufferováním nebo odhazováním nadbytečných prvků.
Příklad:
Observable.interval(1, TimeUnit.MILLISECONDS)
.onBackpressureBuffer() // bufferuje prvky, pokud se předplatitel nemůže držet
.observeOn(Schedulers.computation())
.subscribe { item ->
Thread.sleep(10) // pomalé zpracování
println(item)
}
V tomto příkladu, bez onBackpressureBuffer(), bude tok příliš rychlý na zpracování, což povede k chybám.