読書会(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の最初から。
[ 戻る ]