Ich frage mich, ob ich Schedulers.io() oder Schedulers.newThread() verwenden sollte, wenn ich parallel auf Datenbanktabellen zugreifen.Schedulers.io() auf parallele Datenbanksuche
Wenn ich zum Beispiel Schedulers.io() verwende, um die Datensätze aus Tausenden von Tabellen parallel auszuwählen, befanden sich viele neu erstellte Threads im Thread-Pool nach dem Task.
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
})...
Wenn jedoch eine solche Aufgabe eine nächtliche Partie waren, diese Themen müssen im Thread-Pool nicht sein, da die meisten von ihnen nicht in die meiste Zeit benötigt wurden.
In diesem Fall denke ich, dass ich Schedulers.newThread() verwenden sollte. Ist es richtig?
Klingt für mich richtig. 'Schedulers.io()' ist ein unbegrenzter Thread-Pool, was bedeutet, dass Sie, wenn Sie viel gleichzeitig ausführen, dem Pool viele Threads hinzufügen. Wenn das nicht das ist, was Sie wollen, können Sie '.newThread()' benutzen, um jeden Thread wegzuwerfen, nachdem Sie ihn benutzt haben. Sie sollten Ihre Frage wahrscheinlich als Frage neu formulieren und dann den Antwortteil auf eine Antwort verschieben und akzeptieren. –
Ich frage mich immer noch, ob das besser wäre. Wenn ich 'Schedulers.io()' benutze und 'Schedulers.shutdown()' 'rufe, reinigt die Methode shutdown die zwischengespeicherten Threads? Oder verursacht es andere Probleme? – otal