最新要闻
- 【天天新要闻】500km续航纯电MPV!李想首曝网约车D1 Plus:项目被叫停太遗憾
- 吕钱浩:苹果2026年可能会推真全面屏iPhone 那个时候中兴已是第7代了
- 焦点快报!博主阿秋准备坐地铁游香港:晒证件自证是90后
- 环球快资讯:手机换号伤不起!当代人换手机号的成本有多高?
- 百事通!iPhone 17 Pro将是最完美iPhone!果粉还要等两年时间
- 苦是一种享受!董明珠回应仍做手机:格力一些部件必靠进口 国产质量不达标
- 冷水江市气象局发布大风蓝色预警【Ⅳ级/一般】
- 自称从清华退学考北大博主删除视频:此前收获50万点赞 快速涨粉
- 全球新资讯:2999元国产显卡抢疯了 Steam游戏实测能玩 老黄旧将打造
- 当前快看:实拍成都6-7级大风来袭:狂风呼啸树折腰 行人雨伞秒被吹翻
- 邹磊委员:推进“风光水火储”多能互补综合能源供给体系建设
- 国内已超越GPS 北斗卫星今年再发三颗星:下一代已在路上
- 世界观点:称根据身体来划分性别比较好 女星桥本爱被LGBT攻击
- 【独家】女生月薪两万辞职考研八次失败:次次铩羽而归
- 环球今热点:SSD比机械硬盘更容易坏?实测来了:跟想象中不一样
- 全球观天下!2月轿车销量排名:两“逸”同病相怜、秦汉一马平川
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
怎么利用异步设计提升系统性能?
异步是一种程序设计的思想,使用异步模式设计的程序可以显著减少线程等待,从而在高吞吐量的场景中,极大提升系统的整体性能,降低请求时延。
(资料图片)
同步设计流程
我们假设要做一个转账的业务,即从账户A中转账100元到账户B中,它包含2步:
- 从A的账户中减少100元
- 给B的账户增加100元
我们可以设计2个Service:
- Transfer服务,负责转账,接口是Transfer(A, B, 100)
- Account服务,负责账户管理,接口是Add(A, -100)和Add(B, 100)
转账业务的伪代码如下:
Transfer(accountFrom, accountTo, amount){ Add(accountFrom, -1*amount) Add(accountTo, 1*amount) return OK}
假设Add操作的平均响应时延是50ms,那么我们的Transfer操作平均实验大约是100ms。在实际运行过程中,每处理一次Transfer操作,需要耗时100ms,并且在100ms内需要独占一个线程,即每个线程每秒最多可以处理10次Transfer操作。
假设我们在一个服务器上同时打开的线程数量上限是10000,那么这个服务器每秒可以处理的请求上限是:10000*10 = 100000次。
当客户请求数量超过上限时,请求就需要排队,那么Transfer操作的响应时延变成:排队等待时延+处理时延(100ms),即在大量请求的场景中,我们的服务响应时延增加了。
但是,在这种情况下,服务器的资源并没有被消耗很多,例如CPU、内存、网卡等资源都很空闲,我们的100000个线程大部分时间在等待Add操作返回结果。
上面就是同步设计方式,在这种情况下,整个服务器的所有线程大部分时间都没有在工作,而是在等待。
异步设计流程
对于同样的业务场景,我们来看一下异步方式下的伪代码:
TransferAsync(accountFrom, accountTo, amount, OnComplete){ AddAsync(accountFrom, -1*amount, OnDebit(accountTo, 1*amount, OnAllDone(OnComplete)))}OnDebit(amountTo, amount, OnAllDone(OnComplete)){ AddAsync(accountTo, amount, OnAllDone(OnComplete))}OnAllDone(OnComplete){ OnComplete()}
这里TransferAsync和之前的Transfer相比,增加了一个参数,这个参数是一个回调方法OnComplete()。
上面方法的语义:请帮我执行转账操作,当转账完成后,请调用OnComplete()方法,调用TransferAsync的线程不必等待转账完成就可以立即返回,当转账结束后,OnComplete()方法会被调用来执行后续的工作。
上面代码中,我们定义了2个回调方法:
- OnDebit():扣减账户accountFrom完成后调用的回调方法
- OnAllDone():转入账户accountTop完成后调用的回调方法
整个异步操作的语义如下:
- 异步从accountFrom的账户中减去相应的钱数,然后调用OnDebit方法
- 在OnDebit方法中,异步把减去的钱数加到accountTop账户中,然后执行OnAllDone方法
- 在OnAllDone方法中,调用OnComplete方法
采用异步方式后,整个流程的时序和同步实现是完全一样的,区别在于线程模型由同步顺序调用改为异步调用和回调的机制。
由于流程的时序和同步方式相同,在低请求量的场景下,平均响应时延还是100ms,在超高请求量的场景下,异步机制不需要线程等待执行结果,只需要个位数的线程,即可实现同步场景大量线程一样的吞吐量。
在异步模式下,由于没有了线程数量上的限制,总体吞吐量上限会大大超过同步实现,并且在服务器CPU、网络带宽资源达到极限之前,响应时延不会随着请求数量增加而显著升高,几乎可以一直保持100ms左右的响应时延。
异步框架:CompletableFuture
Java语言中常用的异步框架包括CompletableFuture和RxJava,我们主要来看CompletableFuture。
它是Java 8中新增的一个强大的异步编程的类,包括了我们在开发异步程序过程中需要的大部分功能。
针对上述的转账场景,我们来看一下如何使用CompletableFuture实现。
首先定义2个接口:
public interface AccountService { CompletableFuture add(int account, int amount);}
public interface TransferService { CompletableFuture transfer(int fromAccount, int toAccount, int amount);}
然后实现转账功能:
public class TransferServiceImpl implements TransferService { @Inject private AccountService accountService; @Override public CompletableFuture transfer(int fromAccount, int toAccount, int amount) { return accountService.add(fromAccount, -1 * amount) .thenCompose(v -> accountService.add(toAccount, amount)); }}
客户端调用TransferService时,可以使用同步方式,也可以使用异步方式:
public class Client { @Inject private TransferService transferService; private final static int A = 1000; private final static int B = 1001; public void syncInvoke() throws ExecutionException, InterruptedException { // 同步调用 transferService.transfer(A, B, 100).get(); System.out.println("转账完成!"); } public void asyncInvoke() { // 异步调用 transferService.transfer(A, B, 100) .thenRun(() -> System.out.println("转账完成!")); }}
异步设计的思想:当我们要执行一项比较耗时的操作时,不去等待操作结束,而是给这个操作一个命令:“当操作完成后,接下来去执行什么”。
使用异步编程带来的好处是可以减少或者避免线程等待,只用很少的线程就可以达到超高的吞吐能力。
使用异步编程带来的问题是复杂度增加,代码可读性和可维护性会下降。
关键词:
怎么利用异步设计提升系统性能?
【天天新要闻】500km续航纯电MPV!李想首曝网约车D1 Plus:项目被叫停太遗憾
全球观焦点:Go 面向对象
全球快播:Vue——Vue初始化【三】
吕钱浩:苹果2026年可能会推真全面屏iPhone 那个时候中兴已是第7代了
焦点快报!博主阿秋准备坐地铁游香港:晒证件自证是90后
环球快资讯:手机换号伤不起!当代人换手机号的成本有多高?
百事通!iPhone 17 Pro将是最完美iPhone!果粉还要等两年时间
苦是一种享受!董明珠回应仍做手机:格力一些部件必靠进口 国产质量不达标
冷水江市气象局发布大风蓝色预警【Ⅳ级/一般】
自称从清华退学考北大博主删除视频:此前收获50万点赞 快速涨粉
世界热议:PMP项目变更管理及变更流程总结
利用CSS使博客园图片自动居中,而文字保持居左
天天热文:量化交易基础 - 012 - 检验中的假设条件
全球新资讯:2999元国产显卡抢疯了 Steam游戏实测能玩 老黄旧将打造
当前快看:实拍成都6-7级大风来袭:狂风呼啸树折腰 行人雨伞秒被吹翻
邹磊委员:推进“风光水火储”多能互补综合能源供给体系建设
Log4j 配置
每日速递:flink入门-流处理
全球消息!汉诺塔问题——分而治之(引入递归,解决重复子问题)
世界球精选!Java基础入门-数组练习
国内已超越GPS 北斗卫星今年再发三颗星:下一代已在路上
世界观点:称根据身体来划分性别比较好 女星桥本爱被LGBT攻击
【独家】女生月薪两万辞职考研八次失败:次次铩羽而归
全球新资讯:第128篇:浏览器存储(cookie、webStorage、 IndexedDB)
世界简讯:关于使用python脚本将同级的其他目录下的所有文件根据年份移动到当脚本位置的年份目录
环球今热点:SSD比机械硬盘更容易坏?实测来了:跟想象中不一样
全球观天下!2月轿车销量排名:两“逸”同病相怜、秦汉一马平川
通讯!姚劲波代表:高学历干家政可能会越发普遍
《庆余年2》冲上热搜榜:网曝郭麒麟演的角色范思辙换人了
资讯:shiro-550反序列化漏洞分析
资讯:64.异常
世界热文:[新媒体运营]新媒体运营概述
9名初中生花18元点18串里脊庆生 网友看哭:回不去的年华
今日报丨金钱豹回拜游客 动物园回应:没人教、第一次见
世界今日报丨隅田川进口胶囊咖啡液8杯到手10.9元:更鲜更好喝
有赞一面:还有任务没执行,线程池被关闭怎么办?
全球快看点丨注解与反射
java基础二-面向对象的三大特性
全球最资讯丨A卡有能力跟RTX 4090正面刚 AMD:不做是因为太贵、功耗高
微头条丨深山红烛 照亮希望
环球新消息丨Redis 深度学习
环球快资讯:前端设计模式——策略模式
新消息丨MySQL学习笔记-SQL实践1
每日快报!安全性不行 Win7系统真的别用了 又一个游戏《堡垒之夜》放弃支持
每日快播:童年回来了!《灌篮高手》发布流川枫角色海报
每日报道:使用web client对 vcenter 进行补丁升级
有监督学习——梯度下降
全球百事通!聪明的燕姿
当前视点!Oracle数据库中没有scott账户的方法
今日热闻!光速破发?iPhone 14黄色版还未开售便降价600元
华硕发布ROG Strix Impact III鼠标:双手通用、可更换微动插槽
真香!重庆购买HUAWEI问界M7直补3万:起售仅25.98万
当前简讯:滴滴快车预付车费什么时候退款_滴滴快车预付车费什么意思
世界通讯!网络安全(中职组)-B模块:Web安全应用-2
今日播报!客服回应疯狂小杨哥带货翻车:有巡查、违规会处罚
怕了吗?长城公布“1000万悬赏计划”:严厉打击网络水军
【世界新要闻】四位计数器testbench的设计
世界滚动:chatgpt 集成飞书实践指南
自以为是 与 思考
天天通讯!伊朗外长:伊沙恢复外交关系将为两国和地区发展注入巨大动能
世界快讯:日系车掀起买一送一热潮:买皓影插混送飞度、买日产楼兰送轩逸
天天热资讯!50万以内最舒适二排 理想L7正式交付:31.98万起售
环球新资讯:10年分红1000多亿!董明珠鼓励员工“砸锅卖铁”买格力股票
剪刀石头布的算法
资讯推荐:全球最强!传音发布260W有线、110无线快充:8分钟充满
世界观热点:美国科学家改变人类科技、终极能源即将实现?真相来了!
世界快讯:《原子之心》更新:添加FOV设置、删除种族主义动画
Shell命令-常用操作2
【质因数分解算法详解】C/Java/Go/Python/JS/Dart/Swift/Rust等不同语言实现
今亮点!霸道女总裁加盟《碟中谍8》
天天播报:00后男生每天下班后卖烤肠解压 50元投资日赚200元:厌恶刷视频、打游戏
【时快讯】网络安全(中职组)-B模块:Web安全渗透测试
环球新消息丨K8S 性能优化-K8S Node 参数调优
环球微速讯:比进口价格便宜!海南三亚榴莲今年6月将大规模上市
当废物挺好?委员称年轻人想躺平更多是调侃 奋斗的是大多数
天天亮点!中国足彩网竞彩11日推荐:曼城取胜无悬念
焦点短讯!使用SSM+Shiro+Layui框架,基于RBAC3模型开发的权限管理系统
snort入侵检测基础概述
当前播报:amusements
环球热议:6月上映!《变形金刚7》角色海报发布:擎天柱、猩猩队长亮相
【速看料】降价潮席卷全国 车企尽数参战是为何?乘联会解答:国六B要来了
观热点:01-C语言概述
环球今热点:真正油电同价!比亚迪投放“深水炸弹”:13.4万买宋Pro DM-i超级混动
环球通讯!立春来首场寒潮横扫我国大部:多地将遭遇滑梯式降温 最高降20℃
【新要闻】活久见!女生家中发现神奇圆柱形手机:登QQ、手电筒、拍照 功能多到炸
读Java性能权威指南(第2版)笔记13_堆内存下
最便宜竖折叠继任者!摩托罗拉Razr 2023真机图出炉:首次拼色后壳
当前快报:汽车价格战新进展:南北大众同日入局 丰田买一辆送一辆
世界速递!day05-功能实现04
Vue————Vue v2.7.14 入口文件【二】
【时快讯】《满江红》中国影史票房榜第6:力压《唐人街探案3》 票房突破45.23亿
环球即时:2023开门红!长四丙成功发射“一箭双星”
环球消息!第一批PCIe 5.0 SSD都是残血!14GB/s满血版还早呢
世界快资讯丨有了ChatGPT 动动嘴就能使唤Excel:我的童年梦想实现了
每日热门:8岁男孩单手打破汉诺塔世界纪录:4.305秒搞定4层
当前头条:海绵宝宝卡通图片线条图_海绵宝宝卡通图片
天生要完美电视剧28集完整版_天生要完美电视剧
对C++做爬虫的代码进行简单分析
世界热推荐:2.HelloSpring