Tôi đã xem xét rx java 2 mới và tôi không chắc mình hiểu ý tưởng của backpressure
nữa ...
Tôi biết rằng chúng tôi có Observable
mà không có backpressure
hỗ trợ và Flowable
có nó.
Vì vậy, dựa trên ví dụ, giả sử tôi có flowable
với 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
}
});
Điều này sẽ gặp sự cố sau khoảng 128 giá trị và điều đó khá rõ ràng là tôi đang tiêu thụ chậm hơn so với việc nhận các vật phẩm.
Nhưng sau đó chúng ta có cùng với 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
}
});
Điều này sẽ không xảy ra sự cố nào cả, ngay cả khi tôi đặt một chút trì hoãn vào việc tiêu thụ nó vẫn hoạt động. Để thực hiện Flowable
công việc, giả sử tôi đặt onBackpressureDrop
toán tử, sự cố đã biến mất nhưng không phải tất cả các giá trị cũng được phát ra.
Vì vậy, câu hỏi cơ bản mà tôi không thể tìm thấy câu trả lời hiện trong đầu là tại sao tôi phải quan tâm đến việc backpressure
khi tôi có thể sử dụng thuần túy Observable
vẫn nhận được tất cả các giá trị mà không cần quản lý buffer
? Hoặc có thể từ phía khác, những lợi thế nào backpressure
mang lại cho tôi trong việc quản lý và xử lý việc tiêu thụ?