Я смотрел новый 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
в пользу управления и обработки потребления?