Sobes.tech
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.