Я дивився на новий 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коли я можу використовувати звичайний, Observableяк і раніше, отримувати всі значення без управління buffer? А може, з іншого боку, які переваги backpressureдають мені на користь управління та поводження з спожиючим?

