2017-04-27 72 views
4

What's different in 2.0介紹ObservableFlowable之間的差異。然而,Observable主要是根據它與Flowable相比缺少的特徵來描述的。只有一個提到的Observable特色:Observable over Flowable的實際優勢是什麼?

使用Observable具有一般比Flowable較低的開銷。

但是,即使這似乎是由建議,Observable優選的元素數量較少,並且更容易,如果任務太重導致的OutOfMemoryError相矛盾。這似乎表明Flowable通常更有效率。

我感到迷惑的另一件事是,如果Observable優選用於用例少於1K的元件,並且Flowable是優選的用例超過10K的元素,然後使用1K和10K元件之間具有箱子是灰色區域。

有沒有關於ObservableFlowable之間差異的更多技術說明?尤其值得一提的是,在決定在1K和10K元素之間的灰色區域使用哪一種元素,或者元素數量未知或可能發生變化時,提供了一種實用的啓發式方法。

相關:This Q&A僅報價沒有進一步的說明文檔。

+1

看起來__的區別特徵是背壓是否啓用。通過本能,如果可能的話,我會使用背壓式的變體,但我不會涉及這個主題...... –

回答

5

是否有可觀察和可流動之間的差異更技術性的解釋嗎?

我給你一個,但大多數人會因技術細節而感到害怕。

然而,Observable大多是根據它與Flowable相比缺少的特性來描述的。

是的,因爲從技術上Observable是所有其經營者的Flowable減去背壓的有關要求協調邏輯。

但是,即使這似乎是建議相矛盾......

沒有矛盾,得到的值通過Observable從一端到另一少遭遇「阻力」,因爲沒有按邏輯不必處理請求協調或臨時緩衝。例如,Observable.flatMapIterable不必排隊源項目,因爲每個內Iterable可以將其全部立即從onNext流。 Flowable必須排隊項目,蹦牀的排水和Iterable項目排放和限制它在一個相當昂貴的隊列排水邏輯與直接排放相比要求的數量。

這似乎表明,可流動的一般效率更高。

在內存使用(因此GC開銷)和延遲之間有一個權衡。

然後使用1K和10K元件之間具有箱子是灰色區域。

這意味着,兩個數字之間,你可能需要找到其他的決策變量,如個別元件尺寸,預期等待時間,什麼是您的應用程序/系統做休息,等

或當元件的數量是未知的或可以改變

Observable的情況下使用單詞「最長」,這意味着在任何給定時間,則有1000種元素或更小,或者可替換地的一個可能的緩衝序列,你的源頭最多隻能發射1個元素平均每毫秒。

這否則典型的 「依賴」 的情況:

  • 可以在源合理backpressured?
  • 處理邏輯通常比源或其上級更慢嗎?
  • 不同的用戶會遇到不同數量的元素嗎?
  • 環境受到某種限制嗎?
  • 項目是否比較大?

如果你可以回答這些問題是,你最好用Flowable

0

ObservableFlowable非常相似。 Flowable是較新的,並且通常更先進:

  • 它實現背壓
  • 它符合爪哇Reactive Streams規範(要被包括在JDK9)

原因Observable仍然存在與概念兼容性原微軟的ReactiveX框架。請記住RxJava是ReactiveX project的一部分。

我建議Flowable高於Observable在大多數(甚至全部)情況下。除非您正在開發Java部分不佔主導地位的多語言項目。