
1. 使用 sample 操作符的確定文中已經(jīng)提到,會丟失部分事件犹撒;
2. 使用 sleep 延時的操作也并不完美折联,下游處理過慢(超過 sleep 時間)時依然后丟失事件。
3. RxJava1.x 中解決 BackPressure 的最優(yōu)雅方式應(yīng)該是使用 request(long n) 方法油航。具體如下:
rxjava2.x的Observable是不存在背壓的概念的崭庸,首先博主都沒有完全理解什么是背壓怀浆,背壓是下游控制上游流速的一種手段谊囚。在rxjava1.x的時代,上游會給下游set一個producer执赡,下游通過producer向上游請求n個數(shù)據(jù)镰踏,這樣上游就有記錄下游請求了多少個數(shù)據(jù),然后下游請求多少個上游就給多少個沙合,這個就是背壓奠伪。一般來講,每個節(jié)點都有緩存首懈,比如說緩存的大小是64绊率,這個時候下游可以一次性向上游request 64個數(shù)據(jù)。rxjava1.x的有些操作符不支持背壓究履,也就是說這些操作符不會給下游set一個producer滤否,也就是上游根本不理會下游的請求,一直向下游丟數(shù)據(jù)最仑,如果下游的緩存爆了藐俺,那么下游就會拋出MissingBackpressureException炊甲,也就是背壓失效了。在rxjava2.x時代欲芹,上述的背壓邏輯全部挪到Flowable里了卿啡,所以說Flowable支持背壓。而2.x時代的Observable是沒有背壓的概念的菱父,Observable如果來不及消費會死命的緩存直到OOM颈娜,所以rxjava2.x的官方文檔里面有講,大數(shù)據(jù)流用Flowable浙宜,小數(shù)據(jù)流用Observable