随着业务发展,底层数据量越来越大,业务逻辑也日趋复杂化,某些接口耗时也越来越长,这时候接口就需要进行性能优化了,当然性能优化主要跟业务相关涉及改造点可能各不相同,这里就来介绍异步调用多个接口减少响应时间
适用条件
- 调用多个独立的接口,接口间无相互依赖关系
- 非耗时最大的接口占总耗时比重较大
优化前调用方式
优化前的代码按照顺序调用方式:
1 | java复制代码import lombok.extern.slf4j.Slf4j; |
执行结果:
1 | ini复制代码21:40:17.603 [main] INFO DemoTest$InterfaceA - 执行接口InterfaceA.process 耗时:2002ms |
优化后调用方式
优化后的代码按照异步调用方式:
1 | java复制代码import cn.hutool.core.thread.ThreadFactoryBuilder; |
执行结果:
1 | ini复制代码22:03:43.180 [线程名称-1] INFO DemoTest$InterfaceB - 执行接口InterfaceB.process 耗时:2004ms |
此方式还可以结合CompletionService可实现异步任务和执行结果分离,大家可以自行搜索实践
强大的CompletableFuture JDK1.8
1 | java复制代码import com.google.common.collect.Lists; |
执行结果:
1 | ini复制代码22:31:44.822 [ForkJoinPool.commonPool-worker-5] INFO DemoTest$InterfaceB - 执行接口InterfaceB.process 耗时:2005ms |
优化时注意点
- 使用线程池防止内存溢出风险
- 执行结果容器可自行根据需要设置
- 接口粒度可根据实际业务情况组合和拆分
本文转载自: 掘金