J'ai regardé le nouveau rx java 2 et je ne suis pas tout à fait sûr de comprendre l'idée de backpressure
plus ...
Je sais que nous avons Observable
qui n'a pas de backpressure
soutien et Flowable
qui en a.
Donc, basé sur l'exemple, disons que j'ai flowable
avec 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
}
});
Cela va planter après environ 128 valeurs, et c'est assez évident que je consomme plus lentement que d'obtenir des articles.
Mais alors nous avons la même chose avec 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
}
});
Cela ne plantera pas du tout, même si je tarde à le consommer, cela fonctionne toujours. Pour faire du Flowable
travail, disons que je mets un onBackpressureDrop
opérateur, le crash est parti mais toutes les valeurs ne sont pas non plus émises.
Donc, la question de base à laquelle je ne trouve pas de réponse actuellement dans ma tête est pourquoi devrais-je me soucier du backpressure
moment où je peux utiliser plain quand Observable
même recevoir toutes les valeurs sans gérer le buffer
? Ou peut-être de l'autre côté, quels avantages backpressure
me procurent la gestion et la gestion de la consommation?