2016-07-09 5 views
3

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?

+0

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. –

+0

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

Antwort

0

Wenn Sie io arbeiten parallel begrenzen wollen, dann verwenden Sie eine benutzerdefinierte Scheduler:

Scheduler scheduler = Schedulers.from(Executors.newFixedThreadPool(6));

+0

Vielen Dank für Ihre Antwort. Es könnte die gute Wahl sein, wenn der Thread kurz lebt, da er in kurzer Zeit wiederverwendet werden kann. Wenn ich jedoch Tausende von Threads benötige, hat es das gleiche Problem, dass die unbenutzten Threads bleiben. – otal