しおメモスマートフォン用の表示で見るしおメモ雑多な技術系ブログです。実装読んだ少し前に、RxSwift5のSchedulerの実装を読んでみたので、初めての読んだ系記事です。Scheduler主な組み込みのスケジューラーMainSchedulerConcurrentMainSchedulerSerialDispatchQueueSchedulerConcurrentDispatchQueueScheduler概要RxSwift/Schedulers.mdRxSwiftでは、observeOnやsubscribeOnで、流れてくるものに対する操作を行うスレッドやキューを指定できます。それらの実行場所を指定するものがSchedulerクラス群になっていて、内部実装でDispatchQueueやOperationQueueをラップしています。observeOnとsubscribeOnobserveOnは、指定したschedulerで処理を実行するようなObservableを返すメソッドです。disposeBag)このようにすると、observeOn以降のprintはDispatchQueue.globalで実行されるので、出力はtrue、falseになります。subscribeOnはsubscribeとその解除を指定したスケジューラーで行うようなObservableを返すメソッドです。disposeBag)例えばこのように流すと、doもサブスレッドで行われるため、出力は両方ともfalseになります。Scheduler(SerialDispatchQueueScheduler)は並列なDispatchQueueが渡された場合にも、実行順を保証するために、キューを直列に作り直します。Schedulerは並列キューをそのまま実行してもに問題ない場合に用いられます。こちらの場合、パフォーマンス的に有利になります。RxSwift/ConcurrentDispatchQueueScheduler.swift主な組み込みのスケジューラーMainSchedulerRxSwift/MainScheduler.swiftDispatchQueue.mainのラッパーになっているので、メインスレッドでasyncで実行されます。これはSerialDispatchQueueSchedulerを実装しているので、直列スケジューラーです。UIの更新などの、observeOn向けの実装になっています。ConcurrentMainSchedulerRxSwift/ConcurrentMainScheduler.swiftこちらもDispatchQueue.mainのラッパーですが、こちらは並列スケジューラーで、subscribeOn用の実装になっています。SerialDispatchQueueSchedulerRxSwift/SerialDispatchQueueScheduler.swiftDispatchQueue.globalのラッパーで直列スケジューラーです。ConcurrentDispatchQueueSchedulerRxSwift/ConcurrentDispatchQueueScheduler.swiftDispatchQueue.globalのラッパーで並列スケジューラーです。グローバルキューなので、QoSを指定することが出来ます。明示的にサブスレッドで動かしたい際は、通常こちらを利用することになります。はてなブログProiOSエンジニアです。