[RxJava]RxJavaスケジューラ
10800 ワード
📝RxJavaの学習手順
1.不可観測類を明確に理解する(特に熱不可観測と冷不可観測の概念を理解しなければならない)
2.変換、制御、結合演算子などのカテゴリの主な関数を学習する
3.スケジューラの意味、subscribeOn()とobserverOn()関数の違い
4.その他のデバッグ、フロー制御関数
RxJavaでは、スケジューラは、RxJavaの非同期プログラミングのためのスレッドマネージャです.
つまり、スケジューラを使用して、どのスレッドで何を処理するかを制御できます.
RxJavaのみを使用して非同期処理を行うのではなく、スケジューラを使用してのみ、非同期操作を実現できます.
スケジューラを使用して、通知者とデータ処理者のスレッドを分離することで、スレッドにコードを記述する簡潔さとスレッドの複雑さを低減できます.
プロバイダ側のデータストリームを制御してスケジューラを指定するには、subscribeOn()およびobserverOn()演算子を使用して、サブスクライバが渡すデータ処理を制御します.
subscribeOnは、最初の呼び出しにのみ影響しますが、どこにいても複数回呼び出され、後で実行される演算に影響を与えるため、位置が重要です.
スケジューラのタイプにはsingle、computing、io、trampoline、new threadがあります.
RxJavaは、計算、IO、および転送の3つの計画プログラムを使用することを推奨します.
単一スレッドの繰り返し使用を続行します.RxJava内部でもスレッドが1つずつ作成され、1回に作成されたスレッドを使用して複数のタスクが処理されます.非同期処理を選択した場合、単一スレッドスケジューラを使用する必要はほとんどありません.
CPUに対応する計算スケジューラは、IO動作を行わない通常の計算/計算タスクに用いられる.
ファイルI/OなどのIO操作やネットワーク要求の処理を行うスケジューラ.計算スケジューラとは異なり、必要に応じてスレッドの作成を続行します.
新しいスレッドを作成せずに、現在使用されているスレッドに無限サイズのキューを作成します.
他のスケジューラとは異なり、リクエストを受信するたびに新しいスレッドが生成されます.
ソース
https://4z7l.github.io/2020/12/14/rxjava-5.html
1.不可観測類を明確に理解する(特に熱不可観測と冷不可観測の概念を理解しなければならない)
2.変換、制御、結合演算子などのカテゴリの主な関数を学習する
3.スケジューラの意味、subscribeOn()とobserverOn()関数の違い
4.その他のデバッグ、フロー制御関数
1.RxJava Scheduler
RxJavaでは、スケジューラは、RxJavaの非同期プログラミングのためのスレッドマネージャです.
つまり、スケジューラを使用して、どのスレッドで何を処理するかを制御できます.
RxJavaのみを使用して非同期処理を行うのではなく、スケジューラを使用してのみ、非同期操作を実現できます.
スケジューラを使用して、通知者とデータ処理者のスレッドを分離することで、スレッドにコードを記述する簡潔さとスレッドの複雑さを低減できます.
プロバイダ側のデータストリームを制御してスケジューラを指定するには、subscribeOn()およびobserverOn()演算子を使用して、サブスクライバが渡すデータ処理を制御します.
subscribeOnは、最初の呼び出しにのみ影響しますが、どこにいても複数回呼び出され、後で実行される演算に影響を与えるため、位置が重要です.
Observable.fromIterable(shapes) // shapes 리스트는 (Red,Ball), (Green, Ball), (Blue,Ball) 이렇게 구성되어 있습니다.
.subscribeOn(Schedulers.computation())
.subscribeOn(Schedulers.io())
.doOnSubscribe(data -> MyUtil.printData("doOnSubscribe")) // printData System.out.println(""+Thread.currentThread().getName()+" | "+message+" | ")
.doOnNext(data -> MyUtil.printData("doOnNext", data))
.observeOn(Schedulers.newThread())
.map(data -> {data.shape = "Square"; return data;})
.doOnNext(data -> MyUtil.printData("map(Square)", data))
.observeOn(Schedulers.newThread())
.map(data -> {data.shape = "Triangle"; return data;})
.doOnNext(data -> MyUtil.printData("map(Triangle)", data))
.observeOn(Schedulers.newThread())
.subscribe(data -> MyUtil.printData("subscribe", data));
subscribeOnでは、複数回呼び出されても最初の呼び出しにのみ影響するため、計算スケジューラはデータストリームを生成し、observerOn(Schedulers.newthread()によってnew threadで演算を実行します.main | doOnSubscribe |
RxComputationThreadPool-1 | doOnNext | MyShape{color='Red', shape='Ball'}
RxComputationThreadPool-1 | doOnNext | MyShape{color='Green', shape='Ball'}
RxComputationThreadPool-1 | doOnNext | MyShape{color='Blue', shape='Ball'}
RxNewThreadScheduler-1 | map(Square) | MyShape{color='Red', shape='Square'}
RxNewThreadScheduler-1 | map(Square) | MyShape{color='Green', shape='Square'}
RxNewThreadScheduler-1 | map(Square) | MyShape{color='Blue', shape='Square'}
RxNewThreadScheduler-2 | map(Triangle) | MyShape{color='Red', shape='Triangle'}
RxNewThreadScheduler-2 | map(Triangle) | MyShape{color='Green', shape='Triangle'}
RxNewThreadScheduler-2 | map(Triangle) | MyShape{color='Blue', shape='Triangle'}
RxNewThreadScheduler-3 | subscribe | MyShape{color='Red', shape='Triangle'}
RxNewThreadScheduler-3 | subscribe | MyShape{color='Green', shape='Triangle'}
RxNewThreadScheduler-3 | subscribe | MyShape{color='Blue', shape='Triangle'}
2.スケジューラタイプ
スケジューラのタイプにはsingle、computing、io、trampoline、new threadがあります.
RxJavaは、計算、IO、および転送の3つの計画プログラムを使用することを推奨します.
public final class Schedulers {
@NonNull
static final Scheduler SINGLE;
@NonNull
static final Scheduler COMPUTATION;
@NonNull
static final Scheduler IO;
@NonNull
static final Scheduler TRAMPOLINE;
@NonNull
static final Scheduler NEW_THREAD;
}
Scheduler作成メソッドコンテンツSINGLEScheduler.()単一スレッドを作成し、COMPUTTIONスケジューラの使用を続行します.計算()内部にスレッドプールを作成します.スレッド数=プロセッサ数IOSchedulerです.io()必要に応じてネジの作成を続行します.トランポリン()現在のスレッドに無限サイズのキューNEW THREADSChedulerを作成します.新スレッドはnewThread()ごとに作成されます1. Single Thread Scheduler
単一スレッドの繰り返し使用を続行します.RxJava内部でもスレッドが1つずつ作成され、1回に作成されたスレッドを使用して複数のタスクが処理されます.非同期処理を選択した場合、単一スレッドスケジューラを使用する必要はほとんどありません.
2. Computation Thread Scheduler
CPUに対応する計算スケジューラは、IO動作を行わない通常の計算/計算タスクに用いられる.
3. IO Thread Scheduler
ファイルI/OなどのIO操作やネットワーク要求の処理を行うスケジューラ.計算スケジューラとは異なり、必要に応じてスレッドの作成を続行します.
4. Trampoline Thread Scheduler
新しいスレッドを作成せずに、現在使用されているスレッドに無限サイズのキューを作成します.
5. New Thread Scheduler
他のスケジューラとは異なり、リクエストを受信するたびに新しいスレッドが生成されます.
ソース
https://4z7l.github.io/2020/12/14/rxjava-5.html
Reference
この問題について([RxJava]RxJavaスケジューラ), 我々は、より多くの情報をここで見つけました https://velog.io/@minnie_dev/RxJava-Observable7テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol