Ich habe mir das neue RX Java 2 angesehen und bin mir nicht ganz sicher, ob ich die Idee von verstehe backpressure
mehr ...
Mir ist bewusst, dass wir Observable
das nicht backpressure
unterstützen und habenFlowable
das hat es.
Nehmen wir also anhand eines Beispiels an, ich habe flowable
mit 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
}
});
Dies wird nach ungefähr 128 Werten abstürzen, und das ist ziemlich offensichtlich, dass ich langsamer konsumiere als Gegenstände zu bekommen.
Aber dann haben wir das gleiche mit 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
}
});
Dies wird überhaupt nicht abstürzen, selbst wenn ich den Verbrauch etwas verzögere, funktioniert es immer noch. Um die Flowable
Arbeit kann sagen , Ich habe onBackpressureDrop
Bediener, crash ist weg , aber nicht alle Werte sind entweder emittiert.
Die Grundfrage, die ich derzeit nicht in meinem Kopf beantworten kann, ist, warum ich mich darum kümmern sollte, backpressure
wenn ich einfach verwenden kann und Observable
trotzdem alle Werte erhalte, ohne die zu verwalten buffer
. Oder vielleicht von der anderen Seite, welche Vorteile bieten backpressure
mir für die Verwaltung und den Umgang mit dem Konsum?