Sobes.tech
Junior — Middle

Opíšte situáciu, keď ste sa stretli s mechanizmom backpressure v systéme alebo aplikácii.

sobes.tech AI

Odpoveď od AI

Backpressure — mechanizmus riadenia toku dát, ktorý zabraňuje preťaženiu spotrebiteľa, ak nedokáže spracovať prichádzajúce dáta rovnakou rýchlosťou, akou prichádzajú.

Napríklad v Android s RxJava, ak Observable generuje udalosti rýchlejšie, než ich môže spracovať Subscriber, vzniká backpressure. Bez správneho spracovania to môže viesť k OutOfMemoryError alebo k pádu aplikácie.

Na zvládnutie toho možno použiť operátory RxJava ako onBackpressureBuffer(), onBackpressureDrop() alebo onBackpressureLatest(), ktoré regulujú tok dát, bufferovaním alebo odhadzovaním nadbytočných prvkov.

Príklad:

Observable.interval(1, TimeUnit.MILLISECONDS)
    .onBackpressureBuffer() // bufferuje prvky, ak sa ich nedokáže držať
    .observeOn(Schedulers.computation())
    .subscribe { item ->
        Thread.sleep(10) // pomalé spracovanie
        println(item)
    }

V tomto príklade, bez onBackpressureBuffer(), bude tok príliš rýchly na spracovanie, čo spôsobí chyby.