Я смотрел на новый rx java 2, и я не совсем уверен, что понимаю идею backpressure
...
Я знаю, что у нас есть Observable
то, у кого нет backpressure
поддержки, а у Flowable
того есть.
Так на основе , например, позволяет сказать , что у меня есть flowable
с 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
}
});
Это выйдет из строя примерно после 128 значений, и это довольно очевидно, что я потребляю медленнее, чем получаю предметы.
Но тогда у нас то же самое с 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
}
});
Это вообще не приведет к сбою, даже если я отложу потребление, он все еще работает. Чтобы заставить Flowable
работать, скажем, я поставил onBackpressureDrop
оператор, сбой исчез, но также не все значения выдаются.
Итак, основной вопрос, на который я не могу найти ответа в настоящее время в моей голове, заключается в том, почему я должен заботиться о том, backpressure
когда я могу использовать plain, Observable
все равно получать все значения без управления buffer
? Или, может быть, с другой стороны, какие преимущества backpressure
дает мне управление и управление потреблением?