Flowable.parallel 对比 Flowable.flatMap?

Flowable.parallel vs Flowable.flatMap?

RxJava 2.0.5引入了ParallelFlowable类型,对应Flowable.parallel()操作符。我发现实现并行性的一般建议是 flatMap 像这样:

Flowable.just(1,2,3)
    .flatMap(x -> Flowable.just(x)
        .observeOn(Schedulers.computation())
        .map(y -> y + 1))
    .forEach(System.out::println);

什么时候使用flatMap并行比较合适,什么时候使用ParallelFlowable比较好?

I've found that the general advice for achieving parallelism is with flatMap like so:

这些建议来自 parallel 引入之前,因此应考虑 API 从那时起的演变。

When is it appropriate to use flatMap for parallelism, and when is it better to use ParallelFlowable?

ParallelFlowable 具有一组有限的运算符:mapfilterdoOnNextreduceflatMap 等。成熟的 Flowable API。因此,如果你有一些 "exotic" 不能用上面的运算符表达的并行操作,你应该坚持基于 Flowable.flatMap 的并行性(或考虑 groupBy 并行性)。

否则,here is a benchmark comparison between the parallelization approaches (code).