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