专栏电商日志财经减肥爱情
投稿投诉
爱情常识
搭配分娩
减肥两性
孕期塑形
财经教案
论文美文
日志体育
养生学堂
电商科学
头戴业界
专栏星座
用品音乐

谈谈JAVA中的同步和异步编码模型

  头条创作挑战赛前言
  在计算机的早期阶段,单处理器系统占据主导地位,许多早期的编程语言都采用了同步编程模型。但是随着硬件的进步,出现了多核的处理器,这就需要开发更好的编程模型。一个能够充分利用所有资源的强大模型将是最合适的模型,这也催生了异步编程模型。
  对于初学者来说,很难理解这两种编程模型之间的区别。在这篇文章中,我将尝试用通俗易懂的术语来简化和解释差异。我们还将看一下Java中的一个简单示例,了解Java中为异步编程提供的API。真实世界类比
  在深入研究编程模型之前,我们先通过现实中的例子了解下同步和异步系统。超市作为一个同步系统
  我们都去过超市商店购买我们的日常用品,每个人都用手推车收集物品,然后去柜台,柜台人员会扫描所有物品,准备账单,接受该人的付款,最后给出收据。对于每个客户来说,这部分都是一个耗时的过程。此外,所花费的时间与商品数量、任何技术故障和找零钱(现金支付)的时间成正比。
  想象一下,如果是节假日,超市打折会怎么样?客户将不得不排队,花费大量时间,就像下面的图片一样:
  在同步系统中,需要等待前一个任务完成,才能处理下一个任务,这会导致系统的瓶颈并降低系统的吞吐量。麦当劳作为一个异步系统
  麦当劳设有自助服务亭终端,客户可以下订单并完成付款。付款完成后,将随订单号一起分发收据。订单准备就绪后,屏幕上会显示订单号。
  在准备食物的同时,顾客可以同时做多件事。他们不会被准备订单的人挡住,因此商店可以避免拥挤。客户不会按顺序收到他们的订单。例如:一个人可能会在另一个人之前收到他的食物,即使他会在他之后下订单。这是异步系统的一个例子。
  异步系统不会等待前一个任务完成,当给定任务正在进行时,它会继续执行另一项任务。同步编程模型
  在同步编程中,每一行代码都是按顺序执行的。在网络或文件IO调用的情况下,执行线程会阻塞。让我们看一下同步代码执行的示例。
  我们将以电子商务系统为例。假设我们有一个函数,可以根据订单获取所有商品。然后它会为这些项目创建一个CSV文件并存储它。此外,它通过电子邮件将订单状态信息发送给客户。在上述情况下,我们的代码将按顺序执行,即第10、11和12行。
  这些fetchItems函数执行数据库调用。数据库调用代价很大,因为它是IO调用。一旦我们调用该fetchItems方法,主线程就会阻塞。直到从数据库成功返回所有项目,它才恢复。
  该createCsvFileForItems函数处理项目并生成CSV文件。该函数再次将主线程置于等待状态。一旦文件创建成功,该函数将返回。此外,它将调用该sendOrderStatus方法。
  该方法sendOrderStatus主要是使用电子邮件地址并将订单状态发送给客户。
  假设每个函数所花费的时间如下:fetchItems5毫秒createCsvFileForItems10毫秒sendOrderStatus8毫秒
  程序完成所需的总时间为23毫秒,sendOrderStatus函数将在15毫秒后调用。实际上sendOrderStatus功能是比较独立。但是,它仍然需要等待前面两个功能完成。假如我们先调用sendOrderStatus,在这种情况下,fetchItems函数必须等待8毫秒。
  每个功能花费的时间
  此外,当函数被调用时,主线程会阻塞。当线程进入等待状态时,它无法做任何有用的工作。如果应用程序在多核CPU上运行,则只会使用一个CPU。这会导致其他CPU闲置。
  通过在不同线程中执行独立任务,我们可以充分利用所有CPU内核。在上面的示例中,这可以通过并行运行fetchItems和sendOrderStatus来完成。完成后,我们可以使用结果然后调用createCsvFileForItems。异步编程模型
  在异步编程中,独立的任务在不同的线程上并行执行。一旦任务完成并返回结果,相关任务就会作为回调被调用。独立任务不会阻塞主线程,我们可以利用CPU的所有核心。
  在上面的代码中,我们有每个方法的异步版本。该代码不会依次执行第32、33和34行。它将调用fetchItemsAsync方法新起一个线程从数据库中获取数据。随后,它将调用该sendOrderStatusAsync方法而无需等待第一个函数完成,此方法将在不同CPU上的单独线程上运行。在第33行,该fetchItemsAsync方法返回一个Future。主线程将在第35行等待这个Future并获取它的值。
  该功能的执行将如下图所示:
  异步函数执行Java中的异步编程
  Java提供了实现异步编程的接口和类,如CompletionStage、CompletableFuture,表示返回一个异步执行未来的结果。
  在上面的示例中,该方法fetchItemsAsync返回了FutureListItem,简单理解未来会返回的数据。此方法定义并初始化一个CompletableFuture。在ExecutorAPI的帮助下,它将执行启动一个新线程运行。计算完成后,它会完成future(第48行),然后返回它。
  由于fetchItemsAsync是异步的,主线程可以同时调用sendOrderStatus方法。因此,它不需要等待前一种方法完成。然后它会在以后使用get方法得到最终的结果。主线程将阻塞调用get方法,并在结果可用后恢复。
  我们可以避免上述样板代码并使用CompletableFuture的API。CompletableFuture提供方法supplyAsync和runAsync。Supplier接口是一个不接受任何参数的功能接口。它返回参数化类型的值。
  使用可完成的期货
  supplyAsync我们在上面的代码片段中使用函数。在内部,此函数将在一个线程中从java中的ForkJoinPool执行代码,该thenApply构造处理异步计算阶段的结果。
  如上所示,fetchItems调用异步返回项目列表。然后将结果提供给createCsvFileForItems函数。此函数充当回调函数,并在fetchItems函数完成后被调用。程序开始执行函数sendOrderStatus,无需等待第一阶段的计算完成。因此,我们使用异步编程解耦了两个独立的任务。总结
  我们通过上面简单讲解了同步和异步编程模型,我们来总结下各自的优缺点。
  同步编程模型优点同步编程简单易行。它非常适合CPU密集型任务。更适合简单的系统。调试同步系统更容易。
  同步编程模型缺点它不适合IO绑定任务,CPU内核未得到充分利用。它引入了两个任务之间的依赖关系,一个任务可以阻止另一个任务的执行。不适用于高吞吐量和低延迟系统
  异步编程模型优点可以并行启动独立任务,它充分利用了所有的计算资源。有利于IO任务。可扩展且适用于高吞吐量工作负载。
  异步编程模型缺点需要很多回调函数,调试有时变得困难。不利于CPU密集型任务。在某些编程语言中难以实现。

拉文创造机会!2年5590万!湖人将拿下5届全明星?准确的说,当公牛战绩不佳时拉文和队友争吵下湖人是有机会得到拉文的。尤其湖人记者HarrisonFaigen转发报道并配文写道扎克拉文你已经是一名湖人了。得到拉文对湖人意味着什么?从张荔生聆听歌曲活着就是春天感怀聆听歌曲巜活着就是春天感怀谨献给我敬爱的警察同行春天诗人李群作者张荔生(福建)我想知道还有哪首歌是如此热情奔放澎湃激昂是如此缠绵悱恻深沉高亢是如此深邃旷远悲壮无比徇烂这是对人生的无爱在细节,不爱也是阅读本文前,点击上方卡片一键关注Episode02436细节很重要但说出来就没意思了爱在细节不爱也是不是爱情辛苦而是他在意的不是你遇一人山水有逢念一人风过轻澜执一人潋水之滨终一人悱作家专栏邹长森散文人到中年的苦乐年华人到中年的苦乐年华邹长森人到中年,多了沉稳,少了浮躁。多了睿智,少了天真。工作或是生活,一切变得有规律有节奏,不紧不慢,有条不紊。每天迎来新的黎明,天气或阴或晴,或下雨下雪刮大风,被讨厌的勇气读书笔记(7)家人也要划清界限干涉甚至担负起别人的课题这会让自己的人生沉重而痛苦。如果你正在为自己的人生而苦恼这种苦恼源于人际关系那首先请弄清楚这不是自己的课题这一界限然后,请丢开别人的课题。这等我走了等我走了文莲年等我走了,请不要悲伤不要把日子过的凄凉我去了天堂,请为我祝福我也在天上同样为你守望你孤单的时候,请抬头看天那朵飘过的白云就是我在聆听你寂寞的诉说你想哭的时候,请来到那当所有人都选择避开宇宙勇时,只有他们逆流而上!2016年西部决赛雷霆被勇士逆转之后,雷霆当家杜兰特在夏天选择离开球队,加盟击败自己的勇士。这一行为,给了杜兰特投敌的标签,更是直接改变了未来几年的联盟发展格局。已经拥有了水花兄弟芬奇在戈贝尔受伤后,加尔扎和里德联手拯救了这场比赛森林狼以110102击败骑士。赛后,森林狼主教练克里斯芬奇接受媒体采访,谈到了本场比赛。在鲁迪戈贝尔受伤后,卢卡加尔扎和纳兹里德联手拯救了这场比赛。芬奇在采访中表示。让加尔扎上场,NBA现任急停跳投得分最好的射手,凯文杜兰特名列前茅凯文杜兰特再次成为NBA急停跳投得分最高的球员之一。过去几周一直在讨论本赛季迄今为止联盟中个人进攻的爆炸式增长,40分和50分的比赛正朝着威尔特张伯伦时代的数字飙升。虽然我们没有可谢天谢地如果中囯男足解散,你会对男足说些什么?热烈庆祝你们(男足)终于可以回老家永远不要再回来了,谢谢啊,万谢!!!从此广大的人民群众可以洒洒潇潇过日子了,心不堵了,眼不烦了,口不骂人了,国际足联宣布对阿根廷队世界杯决赛中的不当行为进行调查!国际足联13日宣布,国际足联纪律委员会将对阿根廷队在卡塔尔世界杯决赛中的不当行为进行调查。在一份发布于官网的文件中,国际足联称在卡塔尔世界杯决赛中,阿根廷队的行为可能违反了关于公平
二本女生差一分考研失败应聘前台被拒认为自己长得丑资料图,源自视觉中国。摘要在这个被称为最难毕业季的夏天,求职者中还有一部分连年考研失利的人。我们接触到一些二本毕业生,大学在迷茫中度过,没做规划,赶着考试,也随大流考研。24岁的东尸变(聊斋故事)山东阳信县郊外距离县城五六里处,有一个小村庄叫蔡店。在官道的边上,有一个老汉带着自己儿子开了一家小旅店,专门为进出县城的客人住宿打尖用,但有路过的客商,车夫,都会在小旅店里住下,所2012年希拉里助手披露为报复克林顿,希拉里私生活也很混乱作为一直都唯恐天下不乱的所谓世界霸主,美国国内的政坛更迭常常也会引起不少人的关注。而在这其中,有一位拥有无数亮眼光环的女性曾经书写下属于自己的浓墨重彩的一笔。她就是曾经和特朗普同台歪瓜裂枣别演花魁!这10位女星的出场,才叫眉目如画姿容绝世要说古装剧中最令观众期待的角色,那还真未必是男女主,而是花魁!要知道,花魁可是才貌双全色艺双绝的化身,只是并非每部影视剧都能满足观众挑剔的眼光,可不是所有漂亮女演员都驾驭的了花魁一什么工作不体面,但是工资高?评论区扎心了!哈哈哈叫校花先跑,你开宾利一秒追过她。小伙骗41岁漂亮阿姨千里来约会,网友你千万不能伤害他!哈哈哈伤害性不大,侮辱性极强。注意审题,小明,他和五位同学!必须能坚持,工资不低了,假期可以从300元一斤的茶叶和1000元一斤的有何区别呢?首先是品牌溢价。你去大品牌买个2000块的大红袍,在其他小店500块就拿下了,在武夷山200块就能买到。如果自己有辨识能力,花300块(非品牌)买到1000元(大品牌)的茶,是很容版本主流熬兴95详细教学,还不会的可以看一下附带一图流开局废话哈喽大家好!我是犯心。今天给大家带来的是版本主流阵容熬兴95详细阵容教学阵容特点控制足,爆发高,一局全是同行!有两个小伙伴让犯心更一期熬兴的阵容,那么好直接上教学。阵容组成民间故事木匠住宿,美妇贪淫他假装迎合,离开时悄悄布下机关木匠周飞,五代十国后周人氏,从小父母双亡,和师父老木匠相依为命。老木匠手上功夫一流,据说还会功夫,他是个瘸子,脸上尽是醒目的疤痕,小孩见了都会吓哭。然而,他有个很雅致的名字,叫周玉歪瓜裂枣别硬演公主,这9位女星告诉你,什么才叫金枝玉叶不是所有的人都配得上公主这两字,娱乐圈的某些演员请有些自知之明可以吗,实在是太折磨观众的眼睛了。比如最近迪士尼真人电影白雪公主也翻车了,这个白雪公主不仅肤色不白皙,且五官也是平平无你笑别人就哭浙江队时隔2094天后再获中超胜利,广州城病入膏肓仅用了45分钟,浙江队便在和广州城的较量中锁定胜局,开赛5轮,浙江队终于收获了赛季首胜,更是球队时隔2094天在中超收获的又一场胜利。但浙江队的幸福建立在广州城的痛苦之上,广州城2塞尔克罗斯希望明年再决定续约与否,他不想成为皇马的负担直播吧6月20日讯据塞尔电台透露,克罗斯决定暂不与皇马续约,他想等到明年再决定未来,因为他不想成为俱乐部的负担。克罗斯目前的合同将在2023年到期,媒体指出,皇马已经为其提供了期限
友情链接:快好找快生活快百科快传网中准网文好找聚热点快软网