V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git00ll
V2EX  ›  Java

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

  •  
  •   git00ll · 2021-12-16 13:58:00 +08:00 · 1460 次点击
    这是一个创建于 833 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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 条回复    2021-12-17 13:34:22 +08:00
    Tenlearn
        1
    Tenlearn  
       2021-12-16 14:02:26 +08:00
    哪种看着舒服不是一目了然
    2i2Re2PLMaDnghL
        2
    2i2Re2PLMaDnghL  
       2021-12-16 15:43:31 +08:00   ❤️ 1
    不用 Java ,但感觉第二种不像人干事
    如果维护人员脑子没问题的话,就必会把第一种的性能优化到至少不明显次于第二种。基础库对节能减排贡献非常巨大。
    mmdsun
        3
    mmdsun  
       2021-12-17 12:47:16 +08:00 via iPhone
    git00ll
        4
    git00ll  
    OP
       2021-12-17 13:34:22 +08:00
    @mmdsun 他这个的意思是将同步操作包装成异步操作,官方这样做没问题。
    论坛里是要对 Flux 中的每一项进行一个堵塞 io 操作,是使用 parallel + runOn 的方式,还是使用 flatMap+subscribeOn 的方式做对比。
    两种方式都能将同步任务发送到不同线程中执行,都能达到同样的目的,但是不知道区别与优劣,以及那种写法更好。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3239 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 14:22 · PVG 22:22 · LAX 07:22 · JFK 10:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.