V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
git00ll
V2EX  ›  Java

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

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