Ho guardato il nuovo rx java 2 e non sono abbastanza sicuro di aver capito più l'idea di backpressure
...
Sono consapevole che abbiamo Observable
che non ha backpressure
supporto e Flowable
che ce l' ha.
Quindi, sulla base di un esempio, diciamo che ho flowable
con 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
}
});
Questo andrà in crash dopo circa 128 valori, ed è abbastanza ovvio che sto consumando più lentamente che ottenere oggetti.
Ma poi abbiamo lo stesso con 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
}
});
Questo non si bloccherà affatto, anche quando metto un po 'di ritardo nel consumo, funziona ancora. Per far Flowable
funzionare, diciamo che metto onBackpressureDrop
operator, crash è sparito ma non tutti i valori vengono emessi.
Quindi la domanda di base che non riesco a trovare risposta attualmente nella mia testa è perché dovrei preoccuparmi di backpressure
quando posso usare plain Observable
ancora ricevere tutti i valori senza gestire il buffer
? O forse dall'altro lato, quali vantaggi mi backpressure
danno a favore della gestione e della gestione del consumo?