我试图使用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个线程(以我为例)中计算要比在一个线程中慢?
[我测试了您的代码(进行了一些小改动以使其可以在我的环境中使用,并且为了进行计算,并行过程大约需要12秒,而顺序过程大约需要44秒(带有4个内核)。
一些问题:-您可以发布正在运行的代码进行计算吗?-您要传递多少价值?您可以将值发布到数组中吗?-确定要测量整个过程吗?