在 stackoverflow 上看了一个问题: ParallelFlux vs flatMap() for a Blocking I/O task

2021-12-16 13:58:00 +08:00
 git00ll

reactor 项目下的两种写法。

Flux.just(1)
    .repeat(10)
    .parallel(3)
    .runOn(Schedulers.elastic())
    .doOnNext(i -> blockingTask())
    .sequential()
    .subscribe()

or

Flux.just(1)
    .repeat(10)
    .flatMap(i -> Mono.fromCallable(() -> {blockingTask(); return i;}).subscribeOn(Schedulers.elastic()), 3)
    .subscribe();

这两种写法有什么区别呢,看起来没有区别。哪种写法更流行呢

1483 次点击
所在节点    Java
4 条回复
Tenlearn
2021-12-16 14:02:26 +08:00
哪种看着舒服不是一目了然
2i2Re2PLMaDnghL
2021-12-16 15:43:31 +08:00
不用 Java ,但感觉第二种不像人干事
如果维护人员脑子没问题的话,就必会把第一种的性能优化到至少不明显次于第二种。基础库对节能减排贡献非常巨大。
mmdsun
2021-12-17 12:47:16 +08:00
git00ll
2021-12-17 13:34:22 +08:00
@mmdsun 他这个的意思是将同步操作包装成异步操作,官方这样做没问题。
论坛里是要对 Flux 中的每一项进行一个堵塞 io 操作,是使用 parallel + runOn 的方式,还是使用 flatMap+subscribeOn 的方式做对比。
两种方式都能将同步任务发送到不同线程中执行,都能达到同样的目的,但是不知道区别与优劣,以及那种写法更好。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/822588

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX