我是ReactiveX库的新手(我使用它的scala变体,RxScala)。
我有Observable
以高比率发出值。我想将函数应用于Observable
(map
)的所有值。我在map
中使用的函数在计算上相当昂贵。
有没有办法让线程池并行计算map
阶段?
答案 0 :(得分:7)
我会将流缓冲到块中,并使用Schedulers.computation()
(基于大小等于可用处理器数量的线程池使用Executor
)在cpus上分配负载:
int chunkSize = 1000;
source
.buffer(chunkSize)
.flatMap(
list ->
Observable
.from(list)
.map(expensive)
.subscribeOn(Schedulers.computation()))
...
如果map
操作足够昂贵,那么在没有buffer
的情况下,您可能同样有效:
source
.flatMap(
x ->
Observable
.just(x)
.map(expensive)
.subscribeOn(Schedulers.computation()))