试过了 parallelStream 和多个 CompletableFuture 的 join ,发现性能差别不是很大。大神们还有啥好的实践方法麽?
1
cxshun 2021-11-25 09:25:56 +08:00
ParallelStream 实际上底层也是维护自己的 ForkjoinPool ,如果你说的多个,多到超过 CPU 核数,那可能定义自己的 ForkjoinPool 去提交 ParallelStream 会更合适点。
如果觉得 ParallelStream 那种 WorkSteal 的方式对你不大适用,那直接使用多线程就行了。 PS:性能差别本来这两种就是类似的。但如果你发现并行和串行差别不大,那就要考虑是不是业务提供方性能不行。 |
2
awalkingman 2021-11-25 09:28:04 +08:00
自己维护个线程池,异步并发去请求多个接口。用 parallelStream 和 CompletableFuture 貌似都是全局的池子
|
3
tairan2006 2021-11-25 09:31:57 +08:00
CompletableFuture 可以注入自定义的线程池
|
4
admol 2021-11-25 09:32:56 +08:00
CompletableFuture 可以指定自定义的线程池
|
5
luxinfl OP |
6
luxinfl OP @cxshun 现在采用的就是多个 CF 的写法,然后一起 join ,等待所有接口调用完毕才走到下一步。提供方的接口性能确实也不好。我也怀疑是不是网络时延太高,h 都是 http 调用
|
8
chengyulong 2021-11-25 09:52:23 +08:00
提供方接口如果性能不好 就是搞再多的异步也不好使,考虑换对接方式吧
|
9
sagaxu 2021-11-25 09:53:49 +08:00 via Android
看看总耗时比最耗时的接口长多少,接口耗时是没办法的
|
10
ixx 2021-11-25 10:07:33 +08:00
差别不大可能是请求处理时间本身就很快
|
11
golangLover 2021-11-25 10:39:37 +08:00 via Android
你以前好像已经问过了吧
|
12
luxinfl OP |
13
luxinfl OP @golangLover 发过类似的,仅仅是使用方法
|
14
fdgdbr 2021-11-25 10:47:07 +08:00
@luxinfl #12 虽然我觉得异步的方式不会引起耗时增加,但是你这么怀疑的话,那就用同步的方式依次调用,把每次调用的耗时都打出来,不就能验证你的怀疑了
|
15
yidinghe 2021-11-25 11:00:37 +08:00 via Android
问楼主个不相干的问题,为什么要把“如何”打成“如果”?这是拼音容易打错还是五笔容易打错?
|
16
OkabeRintaro 2021-11-25 15:10:45 +08:00
@yidinghe 语音输入吧
|
19
ainimuyan 2021-11-26 14:22:50 +08:00
|