スレッド エグゼキューターを使用して rxkotlin でバックグラウンド作業を行う予定です。スレッドプール サイズを 3 に固定しましたが、バックグラウンド操作中に 3 つのうち 1 つのスレッドしか使用しないため、バックグラウンド操作が遅くなるという問題があります。
エグゼキュータ クラス
class ThreadExe : Executor{
companion object {
private const val THREAD_POOL_SIZE = 3
}
private val executor: Executor =
Executors.newFixedThreadPool(THREAD_POOL_SIZE)
override fun execute(runnable: Runnable) {
executor.execute(runnable)
}
}
上記は、スレッドの作成を担当するエグゼキュータ クラスです。
以下のようにバックグラウンドタスクを呼び出します
getSomeDataFromNetworkProcessWithDB()
.subscribeOn(Schedulers.from(ThreadExe()))
.observeOn(AndroidSchedulers.mainThread())
.subscribe()
fun getSomeDataFromNetworkProcessWithDB() {
Observable.fromIteratable(someDataList())
.flatMap {
getSomeNetworkData()
}
.flatMap {
doSomeDbOperation()
}
}
上記のコードに関する私の問題は、これらすべてのネットワークとデータベース操作が同じスレッドで順次動作していることです。サイズ 3 のスレッドプールを指定したため、3 つのネットワーク要求を並行して送信する必要がありますが、要求は順次行わ
れます。誰か助けてください。この問題 ?