RxSwiftのsubscribeOn、observeOnの意味を整理する


なにこれ

subscribeOn, observeOnについて、以前ややこしいなあと思った記憶があるのでかんたんに整理しておきます。

subscribeOnについて

なぜObservable(Cold)の実行スレッドはsubscribeOnで設定するのか

ColdなObservableはsubscribeして初めてObservableのイベントを発火します。
つまりColdなObservableにおいては、購読≒イベント実行といえます。
よって、subscribeOnは、Observableのイベント実行スレッドを決定するという意味になります。

なぜHotのObservableは実行スレッドを変更できないのか

HotなObservableでは、購読の有無にかかわらずObservableがイベントを発行します。
購読前にすでにイベントの実行を行っているため、subscribeOnではObservableの実行スレッドを変更することは出来ません。

observeOnについて

なぜsubscribe内の実行スレッドはobserveOnで設定するのか

一方で、observeOnは、「Observerが」どこでイベントを観測するかという意味になります。

ObserverとObservableの意味をごちゃごちゃにしないことがポイントかと思います。
Observableはイベントを発行するもので、Observerは発行されたイベントを副作用として処理するものです。すなわち、雑な言い方をすると、Observerはsubscribe内で、イベントを観測し、UIの変更などを行う部分になります。

よって、observeOnsubscribe内のObserver実行スレッドを決定すると考えることが出来ます。