データベーステーブルにパラレルにアクセスするときに、Schedulers.io()またはSchedulers.newThread()を使用する必要があるのだろうかと思います。並列データベース検索のSchedulers.io()
例えば、私がSchedulers.io()を使用して何千ものテーブルのレコードを並行して選択すると、新しく作成されたスレッドの多くは、タスクの後のスレッドプールにあります。そのようなタスクが夜間バッチであれば
Observabe.just("table1", "table2", "table3"...)
.flatMap(t -> {
// creating the observable that emits the record
return Observable create(s -> {
Record rec = selectFrom(t);
s.onNext(rec);
s.onCompleted();
})
.subscribeOn(Schedulers.io()); // select in parallel
})...
しかし、これらのスレッドは、それらのほとんどは、ほとんどの時間で必要とされていないので、スレッドプール内にある必要はありません。
この場合、私はSchedulers.newThread()を使うべきだと思います。そうですか?
は、右の私にね。 'Schedulers.io()'は無制限のスレッドプールです。つまり、一度にたくさん実行すると、多くのスレッドをプールに追加することになります。もしそれがあなたが望むものでなければ、 '.newThread()'を使って各スレッドを使い捨てにすることができます。おそらくあなたの質問を質問として再現し、答えの部分を答えに移してそれを受け入れるべきです。 –
これがもっと良いかどうかはまだ疑問です。 'Schedulers.io()'を使って 'Schedulers.shutdown()'を呼び出すと、シャットダウンメソッドはキャッシュされたスレッドを消去しますか?それとも他の問題を引き起こしますか? – otal