読書会(RxJavaリアクティブプログラミング)第1回議事録

[ 戻る ]


=========================================================================================================
Java読書会BOF 「RxJavaリアクティブプログラミング」を読む会 第1回
=========================================================================================================

.. csv-table:: 開催概要

  "日時", "2017年04月22日 10:00 - 17:00"
  "場所", "川崎市教育文化会館 第3会議室"
  "出席者(敬称略)", "井上、伊藤、加藤、岩室、平山、遠藤、長谷川、高橋(徹)、高橋(智)、中澤"

第1回は、p.iii「本書を読む前に」からスタート。

1.Chapter1 RxJavaの基礎知識
********************

1.01 RxJavaの基礎知識
====================

RxJavaとは
--------------------

- p.3: 誤植: 実行結果のWorldに!がない

リアクティブプログラミングとは
--------------------

- AWT,SwingなどのGUIではよくリスナーの登録を行う

- GUIを扱わないサーバーサイドのみ担当しているとリスナーを使わなかったり、知らなかったりするのでは?

  - 組み込みではよく使う(外部からのイベントを扱う)
  - 広い意味ではServletもリスナーと言える
  - MQのpub/subもリスナーと言えるかもしれない

- AndroidとRxJavaは相性が良さそう

  - AndroidだとEventBusを使うライブラリもいろいろある
  - AndroidではUIスレッドでネットワーク通信を利用するとFWが例外を投げる

    - 古いAndroidは例外を投げなかった

1.02 Reactive Streamsについて
====================

Reactive Streamsの構成
--------------------

- リクエスト数を超えた分、publisherがデータ生成した場合、超えた分のデータはどうなるか?

  - publisherが保持してくれるのか, 捨てられるのか
  - ここら辺はpublisherの実装次第では

    - RxJavaではbackpressureの設定で、捨てるか、貯めるかを設定できる
    - publisherが余ったデータをストレージに保存して、後で送るような実装も可能だろう
    - publisher側でデータをqueueに投入するような実装だと、queueの仕様に引きずられるだろう

- リクエスト数をどう決めるべきか

  - subscriberが忙しい時はリクエスト数を減らしてpublisherに通知する、ような実装もできる

- onNextでは1件ずつデータが渡される

  - 図5の最初のrequestのリクエスト数は1
  - その後にonNextが1回呼ばれている
  - その後データ生成が2回されているが、次のrequestが来るまで、次のonNextは呼ばれていない

Reactive Streamsのルール
--------------------

- 複数の通知を同時に行うな、というのはシングルスレッドで行えということか?

  - マルチスレッドの実装でもいいけど、通知に関しては排他的に1件ずつ行う必要があるということでは

- データ数が加算されていって、Long.MAX_VALUEを超えると自動的に無制限になるという仕様はどうなのか

  - リクエスト数がマイナスなら無制限、という仕様でもよかったのでは

- JDK9からReactive Streamsのインターフェースが導入される?

  - https://www.slideshare.net/SimonRitter/55-new-features-in-jdk-9

1.03 RxJavaの基本となる仕組み
====================

非同期処理
--------------------

- 図8:オペレータを呼ぶたびにスレッドが生成されるのか?

  - RxJavaでは、スレッド生成するかどうかは設定で切り替えられる

- 図10:"2"や"3"のデータは、1つ目の消費者から、2つ目の消費者に通知しているように見えるが、実際はHotな生産者からの通知なはず

ColdとHotの生産者(Flowable/Observable)
--------------------

- HotなFlowable/Observableはどこで使うのか

  - Coldだとリソースをたくさん使いそう

1.05 サンプルの作成
====================

環境構築
--------------------

- mavenで異なるライブラリが、同じライブラリの違うバージョンに依存していると、依存関係の解決に苦労する

Flowable(Reactive Streams対応)を使ったサンプル
--------------------

- 組み込みではqueueの長さが満タンの場合は、呼び出し元をブロックすることがあるが、RxJavaではできなそう

  - エラー通知は可能

1.06 RxJavaの全体像
====================

subscriber/Observer
--------------------

- シングルスレッドの場合はonSubScribeの処理途中に、requestとonNextが呼ばれ、それらが完了するまでonSubScribeが完了しないはず

  - 実際に実装したところ予想通りだった

Maybe
--------------------

- p.71: 誤植?: Maybeはデータをデータを -> Maybeはデータを

RxJavaの拡張モジュール
--------------------

- p.76: 誤植?: 各部品のイベントを -> 各部品のイベントと

- Flowableが渡すデータは、参照を渡すので、Flowableとsubscriberで同じオブジェクトを共有できてしまう

- nullを通知するなとのことだが、Optionalや何らかのNullObjectなら通知できるだろう

- FlowableとObservableは結局どちらを使うべきか

  - Flowableだと、どの程度オーバーヘッドがあるのか

- 作法として、disposeするべきか

  - 無限ストリームならやらなくていい
  - AndroidだとActivity終了時にdisposeする必要がある

Chapter2
********************

2.01 ラムダ式とは
====================

ラムダ式の構文
--------------------

- ラムダ式だと記述が簡潔になることを強調しているが、その割にメソッド参照は紹介していない

  - デフォルト設定のIntelliJでは、メソッド参照を使わないと警告が出る

次回は、p.86の最初から。


[ 戻る ]