我想知道当我并行访问数据库表时是否应该使用Schedulers.io()或Schedulers.newThread()。
例如,如果我使用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()。是不是?
答案 0 :(得分:0)
如果您想要并行限制io工作,请使用自定义Scheduler
:
Scheduler scheduler = Schedulers.from(Executors.newFixedThreadPool(6));