1

スレッド エグゼキューターを使用して 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 つのネットワーク要求を並行して送信する必要がありますが、要求は順次行わ
れます。誰か助けてください。この問題 ?

4

1 に答える 1