为什么使用RxJava进行并行计算要比顺序执行慢?

问题描述 投票:0回答:1

我试图使用RxJava多线程加快计算速度,但是并行计算比顺序计算要花更多的时间。我在数组中有数百个值。对于每个值,我都需要进行长时间的计算。并行计算:

            array.toFlowable()
                .parallel()
                .runOn(Schedulers.computation())
                .map { value ->
                    longCalculations(value)
                }
                .sequential()
                .observeOn(Schedulers.io())
                .subscribe { result ->
                    // use results
                }

顺序计算:

            array.toFlowable()
                .map { value ->
                    longCalculations(value)
                }
                .subscribeOn(Schedulers.computation())
                .observeOn(Schedulers.io())
                .subscribe { result ->
                    // use results
                }

我使用System.nanoTime()测量时间。并行过程大约需要100秒,而顺序过程需要60秒。那么,为什么在8个线程(以我为例)中计算要比在一个线程中慢?

parallel-processing rx-java rx-java2
1个回答
0
投票

[我测试了您的代码(进行了一些小改动以使其可以在我的环境中使用,并且为了进行计算,并行过程大约需要12秒,而顺序过程大约需要44秒(带有4个内核)。

一些问题:-您可以发布正在运行的代码进行计算吗?-您要传递多少价值?您可以将值发布到数组中吗?-确定要测量整个过程吗?

© www.soinside.com 2019 - 2024. All rights reserved.