Java 后台请求多个不相关的接口,如果才能提高效率? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
luxinfl
V2EX    程序员

Java 后台请求多个不相关的接口,如果才能提高效率?

  •  
  •   luxinfl 2021-11-25 09:23:34 +08:00 3422 次点击
    这是一个创建于 1425 天前的主题,其中的信息可能已经有所发展或是发生改变。

    试过了 parallelStream 和多个 CompletableFuture 的 join ,发现性能差别不是很大。大神们还有啥好的实践方法麽?

    第 1 条附言    2021-11-26 08:50:27 +08:00
    踩了个坑,涉及到网络 io 的时候,还要注意下 http 连接池的配置,尤其是 maxTotal 和 defaultMaxPerRoute ,这玩意和线程池配置不当,容易卡在获取连接那。。。
    20 条回复    2021-11-26 14:31:55 +08:00
    cxshun
        1
    cxshun  
       2021-11-25 09:25:56 +08:00
    ParallelStream 实际上底层也是维护自己的 ForkjoinPool ,如果你说的多个,多到超过 CPU 核数,那可能定义自己的 ForkjoinPool 去提交 ParallelStream 会更合适点。

    如果觉得 ParallelStream 那种 WorkSteal 的方式对你不大适用,那直接使用多线程就行了。

    PS:性能差别本来这两种就是类似的。但如果你发现并行和串行差别不大,那就要考虑是不是业务提供方性能不行。
    awalkingman
        2
    awalkingman  
       2021-11-25 09:28:04 +08:00
    自己维护个线程池,异步并发去请求多个接口。用 parallelStream 和 CompletableFuture 貌似都是全局的池子
    tairan2006
        3
    tairan2006  
       2021-11-25 09:31:57 +08:00
    CompletableFuture 可以注入自定义的线程池
    admol
        4
    admol  
       2021-11-25 09:32:56 +08:00
    CompletableFuture 可以指定自定义的线程池
    luxinfl
        5
    luxinfl  
    OP
       2021-11-25 09:46:45 +08:00
    @admol
    @tairan2006
    @newskillsget
    两个都是用了自定义的线程池,并行流用的自定义 ForkJoinPool ,CF 用的普通的池子
    luxinfl
        6
    luxinfl  
    OP
       2021-11-25 09:49:04 +08:00
    @cxshun 现在采用的就是多个 CF 的写法,然后一起 join ,等待所有接口调用完毕才走到下一步。提供方的接口性能确实也不好。我也怀疑是不是网络时延太高,h 都是 http 调用
    fdgdbr
        7
    fdgdbr  
       2021-11-25 09:50:48 +08:00
    @luxinfl #6 打日志看下每个提供方接口的耗时不就知道了
    chengyulong
        8
    chengyulong  
       2021-11-25 09:52:23 +08:00
    提供方接口如果性能不好 就是搞再多的异步也不好使,考虑换对接方式吧
    sagaxu
        9
    sagaxu  
       2021-11-25 09:53:49 +08:00 via Android
    看看总耗时比最耗时的接口长多少,接口耗时是没办法的
    ixx
        10
    ixx  
       2021-11-25 10:07:33 +08:00
    差别不大可能是请求处理时间本身就很快
    golangLover
        11
    golangLover  
       2021-11-25 10:39:37 +08:00 via Android
    你以前好像已经问过了吧
    luxinfl
        12
    luxinfl  
    OP
       2021-11-25 10:41:48 +08:00
    @fdgdbr
    @chengyulong
    @sagaxu
    我是觉得这种异步方式会不会很耗时。因为有的接口服务方返回的很快,就几毫秒。但是我服务打的 http 调用时间,差了八九倍。
    luxinfl
        13
    luxinfl  
    OP
       2021-11-25 10:42:49 +08:00
    @golangLover 发过类似的,仅仅是使用方法
    fdgdbr
        14
    fdgdbr  
       2021-11-25 10:47:07 +08:00
    @luxinfl #12 虽然我觉得异步的方式不会引起耗时增加,但是你这么怀疑的话,那就用同步的方式依次调用,把每次调用的耗时都打出来,不就能验证你的怀疑了
    yidinghe
        15
    yidinghe  
       2021-11-25 11:00:37 +08:00 via Android
    问楼主个不相干的问题,为什么要把“如何”打成“如果”?这是拼音容易打错还是五笔容易打错?
    OkabeRintaro
        16
    OkabeRintaro  
       2021-11-25 15:10:45 +08:00
    @yidinghe 语音输入吧
    luxinfl
        17
    luxinfl  
    OP
       2021-11-25 19:55:27 +08:00
    @yidinghe 9 键键盘太小,容易多点
    Salticey
        18
    Salticey  
       2021-11-25 21:35:07 +08:00
    @yidinghe 打五笔不是会把“如何”打成“如果”的,打成“好吓人“才差不多~
    nekoyaki
        20
    nekoyaki  
       2021-11-26 14:31:55 +08:00
    @yidinghe 我还经常看见有人把“如何”打成如果,也想知道到底是怎么打的……
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     958 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 21ms UTC 21:59 PVG 05:59 LAX 14:59 JFK 17:59
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86