Sobes.tech
Junior — Middle

Descreva uma situação em que enfrentou um mecanismo de backpressure num sistema ou aplicação.

sobes.tech IA

Resposta da IA

Backpressure é um mecanismo de controlo de fluxo de dados que impede o transbordamento do consumidor se este não conseguir processar os dados de entrada à mesma velocidade com que chegam.

Por exemplo, no Android com RxJava, se o Observable gerar eventos mais rapidamente do que o Subscriber consegue processá-los, ocorre backpressure. Sem um tratamento adequado, isso pode levar a um OutOfMemoryError ou à falha da aplicação.

Para lidar com isso, pode-se usar operadores do RxJava como onBackpressureBuffer(), onBackpressureDrop() ou onBackpressureLatest(), que regulam o fluxo de dados, fazendo buffer ou descartando elementos em excesso.

Exemplo:

Observable.interval(1, TimeUnit.MILLISECONDS)
    .onBackpressureBuffer() // faz buffer dos elementos se o assinante não consegue acompanhar
    .observeOn(Schedulers.computation())
    .subscribe { item ->
        Thread.sleep(10) // processamento lento
        println(item)
    }

Neste exemplo, sem onBackpressureBuffer(), o fluxo será demasiado rápido para ser processado, o que pode causar erros.