本文介绍了并行数据库搜索的Schedulers.io()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不知道并行访问数据库表时应该使用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()。对吗?

推荐答案

如果要限制io并行工作,请使用自定义Scheduler

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

这篇关于并行数据库搜索的Schedulers.io()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-30 03:41