RxJavaには、5つの異なるスケジューラーから選択できます。
immediate():現在のスレッドですぐに作業を実行するスケジューラを作成して返します。
trampoline():現在の作業が完了した後に実行される現在のスレッドで作業をキューに入れるスケジューラを作成して返します。
newThread():作業単位ごとに新しいスレッドを作成するスケジューラを作成して返します。
Calculation():計算作業を目的としたスケジューラを作成して返します。これは、イベントループ、コールバックの処理、およびその他の計算作業に使用できます。このスケジューラでIOバインド作業を実行しないでください。スケジューラを使用します。代わりにio()。
io():IOにバインドされた作業を目的としたスケジューラを作成して返します。実装は、必要に応じて拡張されるエグゼキュータスレッドプールによってサポートされます。これは、ブロッキングIOを非同期で実行するために使用できます。このスケジューラで計算作業を実行しないでください。スケジューラを使用します。代わりに計算()。
質問:
最初の3つのスケジューラは自明です。ただし、計算とioについて少し混乱しています。
- 「IOバウンド作業」とは正確には何ですか?ストリーム(
java.io
)およびファイル(java.nio.files
)の処理に使用されますか?データベースクエリに使用されますか?ファイルのダウンロードやREST APIへのアクセスに使用されますか? - どのように計算は()とは異なる)newThread( ?それはすべての計算です()呼び出しが毎回新しい(バックグラウンド)スレッドではなく単一の(バックグラウンド)スレッド上にあるのですか?
- IO作業を行うときに計算()を呼び出すのはなぜ悪いのですか?
- 計算作業を行うときにio()を呼び出すのはなぜ悪いのですか?