Cor*_*her 13 project-reactor reactive-streams
我有一个Project Reactor链,它包含一个阻塞任务(网络调用,我们需要等待响应).我想同时运行多个阻塞任务.
似乎可以使用ParallelFlux或flatMap(),裸骨示例:
Flux.just(1)
.repeat(10)
.parallel(3)
.runOn(Schedulers.elastic())
.doOnNext(i -> blockingTask())
.sequential()
.subscribe()
Run Code Online (Sandbox Code Playgroud)
要么
Flux.just(1)
.repeat(10)
.flatMap(i -> Mono.fromCallable(() -> {blockingTask(); return i;}).subscribeOn(Schedulers.elastic()), 3)
.subscribe();
Run Code Online (Sandbox Code Playgroud)
这两种技术的优点是什么?一个比另一个更受欢迎吗?还有其他选择吗?
Sim*_*slé 13
parallel为性能目的而定制的任务并行化,以及"rails"或"groups"之间的工作调度,每个都从Scheduler你传递给他们自己的执行上下文runOn.简而言之,如果您进行CPU密集型工作,它将使您的所有CPU内核都能正常工作.但是你正在进行I/O约束工作......
所以在你的情况下,flatMap是一个更好的候选人.这使用的flatMap并行化更多的是编排.
这几乎是两种选择,如果你不计算flatMap那种稍微不同的味道flatMapSequential(concatMap实际上并不允许并行化).
| 归档时间: |
|
| 查看次数: |
2833 次 |
| 最近记录: |