git00ll
V2EX  ›  Java

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

  •  
  •   git00ll · Dec 16, 2021 · 2530 views
    This topic created in 1791 days ago, the information mentioned may be changed or developed.

    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();
    

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

    4 replies  •  2021-12-17 13:34:22 +08:00
    Tenlearn
    Tenlearn
    Dec 16, 2021
    1
    哪种看着舒服不是一目了然
    2i2Re2PLMaDnghL
    2i2Re2PLMaDnghL
    Dec 16, 2021❤️1
    2
    不用 Java ,但感觉第二种不像人干事
    如果维护人员脑子没问题的话,就必会把第一种的性能优化到至少不明显次于第二种。基础库对节能减排贡献非常巨大。
    mmdsun
    mmdsun
    Dec 17, 2021 via iPhone
    3
    git00ll
    git00ll
    OP
    Dec 17, 2021
    4
    @mmdsun 他这个的意思是将同步操作包装成异步操作,官方这样做没问题。
    论坛里是要对 Flux 中的每一项进行一个堵塞 io 操作,是使用 parallel + runOn 的方式,还是使用 flatMap+subscribeOn 的方式做对比。
    两种方式都能将同步任务发送到不同线程中执行,都能达到同样的目的,但是不知道区别与优劣,以及那种写法更好。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   4316 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 08:44 · PVG 16:44 · LAX 00:44 · JFK 03:44
    ♥ Do have faith in what you're doing.