javaはてブFacebookPocketTwitter前提知識RxJavaにはバックプレッシャと呼ばれる、流量制御の仕組みがある。詳解RxJava2:Backpressureで流速制御onBackpressureBufferPublisherがSubscriberの消費スピードよりも早くデータを作った場合、バッファに生成されたデータを溜めておきたい。このために、onBackpressureBufferメソッドが存在する。このとき、引数でバッファの上限を設定できる。capacity)observeOnSubscriberの実行スレッドを切り替えたい。このためにobserveOnメソッドが存在する。第3引数にbufferSizeが指定でき、request(bufferSize)が裏で実行される。bufferSize)サンプルPublisherが100ms毎にデータを生成し、Subscriberが1000msかけて消費する。}図にすると以下のようになる。これを実行すると、以下のようなログが出力される。fullになっている。Subscriberは2のデータまでしか消費していない。2したがって、onBackpressureBufferに9のデータを溜めようとしたときにエラーになっている。設定したcapacityは5なのに・・・。capacity)バッファが溢れるタイミングonBackpressureBufferメソッドは裏でFlowableOnBackpressureBufferを作る。このとき、内部でバッファ管理するために以下のようにQueueが作られていた。FlowableOnBackpressureBuffer.javaのGithubソースコードで、このQueue実装がこんなかんじになっていて、キューサイズの指定が2のx乗(1,2,4,8,16,32...)に切り上げた値になっていた。実際のキャパシティが8。16のため、16に切り上げられるはず。}ログを見ると、17こめのデータをバッファに溜めるときに例外が出ているのがわかる。2のx乗(1,2,4,8,16,32...)に切り上げるため、厳密な値ではないらしい。はてなブログProJavaとLinuxが得意になりたいシステムエンジニアです。読者になる@kimullaaをフォローこのサイトについてプライバシーポリシーお問い合わせ人気の記事アクセスランキングスポンサーリンクスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。