web-dev-qa-db-ja.com

Rxjavaで「バックプレッシャ」という用語はどういう意味ですか?

私はRxJavaの初心者であり、"backpressure"の意味に興味があります。

それは、生産者が消費者の後ろに圧力をかけることを意味しますか?

それとも、消費者が生産者に圧力をかけているということですか? (反対方向の圧力)

17
ohlab

RxJavaバックプレッシャ

アイテムを非常に速く放出するオブザーバブルがあり、消費者が流れに追いつくことができず、放出されたが消費されていないアイテムの存在につながる場合。

オブザーバブルによって放出されるがサブスクライバーによって消費されない未消費のアイテムがどのように管理および制御されるかは、バックプレッシャ戦略が扱うものです。

背圧を処理するにはシステムリソースが必要なため、要件に合った適切な背圧戦略を選択する必要があります。

詳細参照リンク

11
akhilesh0707

私は背圧についてたくさん読んだことがありますが、 Jonas (リアクティブマニフェストの共著者)による投稿に出くわすまで、何も満足しませんでした。これにより、背圧に関する疑問が明らかになることを願っています。

1つのコンポーネントが追いつくのに苦労している場合、システム全体が賢明な方法で対応する必要があります。ストレス下のコンポーネントが壊滅的に失敗したり、制御されていない方法でメッセージをドロップしたりすることは許容されません。対処できず、失敗することもないので、上流のコンポーネントにストレスがかかっているという事実を伝え、負荷を軽減するように依頼する必要があります。この背圧は、システムが負荷の下で崩壊するのではなく、負荷に適切に応答できるようにする重要なフィードバックメカニズムです。背圧はユーザーまでカスケードする可能性があり、その時点で応答性が低下する可能性がありますが、このメカニズムにより、システムが負荷を受けても回復力があり、システム自体が他のリソースを適用して支援できるようにする情報が提供されます。荷重を分散します。弾性を参照してください。

3
Abdullah Khan

たとえば、大量のデータがある状況を考えてみましょう。センサーは大量のデータを放出し、それは高速で放出されます。
このようなシナリオでは、 バックプレッシャー。簡単に言えば、処理できないアイテムを処理する方法にすぎません。
この圧力を緩和するために、次のようなさまざまな逆圧戦略を明示的に指定します。

  • ドロップ(BackpressureStrategy.DROP):この戦略はアイテムをドロップします、
    容量を超えて処理できない場合
  • 最新(BackpressureStrategy.LATEST):ダウンストリームがアイテムのフローに対応できない場合、送信を停止し、再び使用可能になるまで待機します。最後に到着したアイテムを除いて、アイテムをドロップし続け、ダウンストリームが使用可能になったときに最後のアイテムを送信します。
  • バッファー(BackpressureStrategy.BUFFER):アイテムを処理できるようになるまでバッファーに保存します。

RxJavaバックプレッシャの謎を解くAndroid Uber Engineering

2
Rakhi Dhavale