Eu estive olhando para o novo rx java 2 e não tenho muita certeza de entender a idéia de backpressure
mais ...
Estou ciente de que temos Observable
que não tem backpressure
suporte eFlowable
tem.
Assim, com base no exemplo, digamos que eu tenho flowable
com interval
:
Flowable.interval(1, TimeUnit.MILLISECONDS, Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
// do smth
}
});
Isso vai falhar após cerca de 128 valores, e isso é bastante óbvio que estou consumindo mais devagar do que recebendo itens.
Mas então nós temos o mesmo com Observable
Observable.interval(1, TimeUnit.MILLISECONDS, Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
// do smth
}
});
Isso não trava, mesmo quando eu coloco algum atraso no consumo, ainda funciona. Para fazer o Flowable
trabalho, digamos que eu coloque o onBackpressureDrop
operador, a falha desapareceu, mas nem todos os valores são emitidos.
Portanto, a pergunta básica que não consigo encontrar resposta atualmente em minha cabeça é por que devo me preocupar backpressure
quando posso usar o plain Observable
ainda receber todos os valores sem gerenciar o buffer
? Ou talvez do outro lado, quais vantagens backpressure
me dão em favor do gerenciamento e manuseio do consumidor?