面试官:你来举个栗子,如何使用异步设计提升系统性能?

本文探讨了如何通过异步设计提高系统性能,避免线程等待以提升高吞吐量场景的效率。通过转账服务的例子,展示了同步实现的性能瓶颈以及采用异步实现如何解决等待问题。最后提到了Java中的CompletableFuture框架在异步编程中的应用,强调异步编程虽然能提升性能,但也会增加复杂性,应谨慎使用。
摘要由CSDN通过智能技术生成

最新互联网大厂面试真题、Java程序员面试策略(面试前的准备、面试中的技巧)请移步GitHub

对于开发者来说,异步是一种程序设计的思想,使用异步模式设计的程序可以显著减少线程等待,从而在高吞吐量的场景中,极大提升系统的整体性能,显著降低时延。

因此,像消息队列这种需要超高吞吐量和超低时延的中间件系统,在其核心流程中,一定会大量采用异步的设计思想。

接下来,我们一起来通过一个非常简单的例子学习一下,使用异步设计是如何提升系统性能的。

异步设计如何提升系统性能?

假设我们要实现一个转账的微服务 Transfer( accountFrom, accountTo, amount),这个服务有三个参数:分别是转出账户、转入账户和转账金额。

实现过程也比较简单,我们要从账户 A 中转账 100 元到账户 B 中:

  1. 先从 A 的账户中减去 100 元;
  2. 再给 B 的账户加上 100 元,转账完成。

对应的时序图是这样的:


在这个例子的实现过程中,我们调用了另外一个微服务 Add(account, amount),它的功能是给账户 account 增加金额 amount,当 amount 为负值的时候,就是扣减响应的金额。

需要特别说明的是,在这段代码中,我为了使问题简化以便我们能专注于异步和性能优化,省略了错误处理和事务相关的代码,你在实际的开发中不要这样做。

同步实现的性能瓶颈

首先我们来看一下同步实现,对应的伪代码如下:

Transfer(accountFrom, accountTo, amount) {
	//先从accountFrom的账户中减去相应的钱数
	Add(accountFrom, -1 * amount)
	//再把减去的钱数加到accountTo的账户中
	Add(accountTo, amount)
	return OK
}

上面的伪代码首先从 accountFrom 的账户中减去相应的钱数,再把减去的钱数加到accountTo 的账户中,这种同步实现是一种很自然方式,简单直接。那么性能表现如何呢?接下来我们就来一起分析一下性能

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值