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

2021-11-25 09:23:34 +08:00
 luxinfl

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

3086 次点击
所在节点    程序员
20 条回复
cxshun
2021-11-25 09:25:56 +08:00
ParallelStream 实际上底层也是维护自己的 ForkjoinPool ,如果你说的多个,多到超过 CPU 核数,那可能定义自己的 ForkjoinPool 去提交 ParallelStream 会更合适点。

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

PS:性能差别本来这两种就是类似的。但如果你发现并行和串行差别不大,那就要考虑是不是业务提供方性能不行。
awalkingman
2021-11-25 09:28:04 +08:00
自己维护个线程池,异步并发去请求多个接口。用 parallelStream 和 CompletableFuture 貌似都是全局的池子
tairan2006
2021-11-25 09:31:57 +08:00
CompletableFuture 可以注入自定义的线程池
admol
2021-11-25 09:32:56 +08:00
CompletableFuture 可以指定自定义的线程池
luxinfl
2021-11-25 09:46:45 +08:00
@admol
@tairan2006
@newskillsget
两个都是用了自定义的线程池,并行流用的自定义 ForkJoinPool ,CF 用的普通的池子
luxinfl
2021-11-25 09:49:04 +08:00
@cxshun 现在采用的就是多个 CF 的写法,然后一起 join ,等待所有接口调用完毕才走到下一步。提供方的接口性能确实也不好。我也怀疑是不是网络时延太高,h 都是 http 调用
fdgdbr
2021-11-25 09:50:48 +08:00
@luxinfl #6 打日志看下每个提供方接口的耗时不就知道了
chengyulong
2021-11-25 09:52:23 +08:00
提供方接口如果性能不好 就是搞再多的异步也不好使,考虑换对接方式吧
sagaxu
2021-11-25 09:53:49 +08:00
看看总耗时比最耗时的接口长多少,接口耗时是没办法的
ixx
2021-11-25 10:07:33 +08:00
差别不大可能是请求处理时间本身就很快
golangLover
2021-11-25 10:39:37 +08:00
你以前好像已经问过了吧
luxinfl
2021-11-25 10:41:48 +08:00
@fdgdbr
@chengyulong
@sagaxu
我是觉得这种异步方式会不会很耗时。因为有的接口服务方返回的很快,就几毫秒。但是我服务打的 http 调用时间,差了八九倍。
luxinfl
2021-11-25 10:42:49 +08:00
@golangLover 发过类似的,仅仅是使用方法
fdgdbr
2021-11-25 10:47:07 +08:00
@luxinfl #12 虽然我觉得异步的方式不会引起耗时增加,但是你这么怀疑的话,那就用同步的方式依次调用,把每次调用的耗时都打出来,不就能验证你的怀疑了
yidinghe
2021-11-25 11:00:37 +08:00
问楼主个不相干的问题,为什么要把“如何”打成“如果”?这是拼音容易打错还是五笔容易打错?
OkabeRintaro
2021-11-25 15:10:45 +08:00
@yidinghe 语音输入吧
luxinfl
2021-11-25 19:55:27 +08:00
@yidinghe 9 键键盘太小,容易多点
Salticey
2021-11-25 21:35:07 +08:00
@yidinghe 打五笔不是会把“如何”打成“如果”的,打成“好吓人“才差不多~
ainimuyan
2021-11-26 14:22:50 +08:00
nekoyaki
2021-11-26 14:31:55 +08:00
@yidinghe 我还经常看见有人把“如何”打成如果,也想知道到底是怎么打的……

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

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

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

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

© 2021 V2EX