范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

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

  #头条创作挑战赛#前言
  在计算机的早期阶段,单处理器系统占据主导地位,许多早期的编程语言都采用了同步编程模型。但是随着硬件的进步,出现了多核的处理器,这就需要开发更好的编程模型。一个能够充分利用所有资源的强大模型将是最合适的模型,这也催生了异步编程模型。
  对于初学者来说,很难理解这两种编程模型之间的区别。在这篇文章中,我将尝试用通俗易懂的术语来简化和解释差异。我们还将看一下 Java 中的一个简单示例,了解 Java 中为异步编程提供的 API。真实世界类比
  在深入研究编程模型之前,我们先通过现实中的例子了解下同步和异步系统。超市作为一个同步系统
  我们都去过超市商店购买我们的日常用品,每个人都用手推车收集物品,然后去柜台,柜台人员会扫描所有物品,准备账单,接受该人的付款,最后给出收据。对于每个客户来说,这部分都是一个耗时的过程。此外,所花费的时间与商品数量、任何技术故障和找零钱(现金支付)的时间成正比。
  想象一下,如果是节假日,超市打折会怎么样? 客户将不得不排队,花费大量时间,就像下面的图片一样:
  在同步系统中,需要等待前一个任务完成,才能处理下一个任务,这会导致系统的瓶颈并降低系统的吞吐量。麦当劳作为一个异步系统
  麦当劳设有自助服务亭终端,客户可以下订单并完成付款。付款完成后,将随订单号一起分发收据。订单准备就绪后,屏幕上会显示订单号。
  在准备食物的同时,顾客可以同时做多件事。他们不会被准备订单的人挡住,因此商店可以避免拥挤。客户不会按顺序收到他们的订单。例如: 一个人可能会在另一个人之前收到他的食物,即使他会在他之后下订单。这是异步系统的一个例子。
  异步系统不会等待前一个任务完成,当给定任务正在进行时,它会继续执行另一项任务。同步编程模型
  在同步编程中,每一行代码都是按顺序执行的。在网络或文件 IO 调用的情况下,执行线程会阻塞。让我们看一下同步代码执行的示例。
  我们将以电子商务系统为例。假设我们有一个函数,可以根据订单获取所有商品。然后它会为这些项目创建一个 CSV 文件并存储它。此外,它通过电子邮件将订单状态信息发送给客户。在上述情况下,我们的代码将按顺序执行,即第 10、11 和 12 行。
  这些fetchItems函数执行数据库调用。数据库调用代价很大,因为它是 IO 调用。一旦我们调用该fetchItems方法,主线程就会阻塞。直到从数据库成功返回所有项目,它才恢复。
  该createCsvFileForItems函数处理项目并生成 CSV 文件。该函数再次将主线程置于等待状态。一旦文件创建成功,该函数将返回。此外,它将调用该sendOrderStatus方法。
  该方法sendOrderStatus主要是使用电子邮件地址并将订单状态发送给客户。
  假设每个函数所花费的时间如下:fetchItems- 5 毫秒createCsvFileForItems- 10 毫秒sendOrderStatus- 8 毫秒
  程序完成所需的总时间为 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返回了Future>,简单理解未来会返回的数据。此方法定义并初始化一个 CompletableFuture。在 Executor API 的帮助下,它将执行启动一个新线程运行。计算完成后,它会完成 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 密集型任务。在某些编程语言中难以实现。

王楠女儿生病坚持看世乒赛,表情难受瘫躺沙发,可怜模样让人心疼世乒赛正在如火如荼地进行中,从目前的比赛来看,中国乒乓球男队和女队的好状态将会继续保持。也就是这个时候恰逢国庆假期,很多球迷们在闲暇之时也会观看其比赛,而我们的女乒前任大魔王王楠也散文古运漕的沧桑变迁文朱寿江十月一日,举国欢庆。和县作协组织会员走进含山采风,探寻和含原是一家的含山县人文历史,山水风光。第一站来到含南的千年古镇一一运漕。运漕,我曾去过无数次。因为十多年前和朋友在陶荣耀x40gt将会是新一代冰龙吗?荣耀手机官方公布了此次新机的发布时间是10月13日。据悉一款型号为ADTAN00的荣耀5G手机于9月20日通过3C认证,支持66W快充。外面消息称这款5G新机为荣耀X40GT,相比荣耀旗下折叠屏新机曝光,内部代号或为法拉利作为荣耀方面在今年年初推出的旗下首款折叠屏机型,MagicV自亮相以来就凭借着在产品端的出色表现,受到了众多消费者的青睐。随着MagicV上市时间的增长,日前有消息源曝光了荣耀旗下荣耀70和荣耀X40,怎么选择?当然当然是荣耀70,身边有亲戚买了荣耀X40,当时在店铺里面看这手机屏幕大颜值高,但买回去不过一个星期就后悔了,拍照实在是太拉胯了,画质肉眼可见的差。荣耀70标准版,虽然骁龙778荣耀X40Max新机开始曝光,荣耀X30沦为弃机彻底感人价来袭现在网友又曝光了荣耀X40Max的部分配置参数,了解配置之后发现这款新机确实很有看头。具体来说,屏幕上它采用了7。09英寸OLED屏,并且集成了120Hz刷新率,还支持480Hz触荣耀X40i新机重磅发布,荣耀X30沦为牺牲品改写历史低价说起荣耀x40手机,除了性价比品牌之外,还有的就是这款手机的极窄边框了,在外观上来讲,这项设计使它的颜值大大的增加了许多,这也是很多在实体店中看见这款荣耀x40i就选择它的原因。不如何做到冰箱长保新鲜之道TCLQ10告诉你其中的奥妙现代冰箱最重要的体验是什么?是容量运行噪音,还是能耗?这些都不是!当下生活节奏快,工作繁忙,人们并没有很多的时间花在买菜上。尤其很多上班族白天上班,晚上下班后再去市场面对的只有蔫了日子有毒,且没有解药一日子有毒,且没有解药,但止疼片很多比如音乐,文字,风景和故人,愿时光清浅,故人不散。二不敢奢求有锦鲤般的运气,但求一切顺顺利利,长路漫漫,未来可期。三生活从未变得容易,只不过是我全球首创糖尿病新药华堂宁获批上市!首批将在一线城市上百家医院启用近日,华领医药(02552。HK)研发的全球首创新药多格列艾汀片(商品名华堂宁)获国家药监局批准上市,用于改善成人2型糖尿病患者的血糖控制。据其披露,该药是一款全新机制异位变构功能三大交易动态达成,火箭签下考利斯坦,利拉德去76人的建议被提出北京时间10月10日,有三笔交易动态达成,爵士队和76人队分别裁掉一人,火箭队则是签约一人,补强了中锋位置,而利拉德则有可能去76人队联手哈登和恩比德,具体如何,一起看一下吧。一爵
36氪首发自助取袋机落地近1000家医院,袋拉拉获500万元A1轮融资36氪获悉,专注医疗场景的自助取袋机品牌袋拉拉近日获得500万元A1轮融资,由上海铮言投资。目前公司已启动A2轮融资,主要用于医院市场开拓和设备铺设商业化产品及私域运营变现工具研发光伏哪里最能捞?有人一季度狂赚50亿,有人刚刚扭亏为盈本文来源时代周报作者何明俊政策支持需求扩张,光伏赛道的景气度持续拔高。同花顺iFinD显示,截至4月29日晚,A股已有46家光伏上市公司披露2021年年报和2022年一季报。光伏上斐乐(FILA)是韩国的吗?安踏主营品牌,来源2021年报FILA的官方微博简介是这样的意大利运动时尚品牌FILA于1911年在意大利BIELLA创立,开发了网球高尔夫滑雪等系列。安踏集团于2009年运营FI污染巧克力销往中国有关好时在许多地方撤出和关闭门店的信息是不正确的。中国一直是好时公司的重要市场之一,好时正在优化华销售渠道模式。2月11日,针对谣传将推出中国市场的传言,已有100多年的品牌历史巧油价调整消息今天4月30日,加油站调价后9295号汽油限价市场不断出现俄罗斯石油出口增加的消息,全球供应有可能大幅下降的利好趋于淡化,且美元连续上涨近4000个基点,原油价格腹背受敌,布伦特原油从112美元一度下跌近10美元,但是本周原油大基建规划来了,机构已抢先布局三大潜力黑马近日高层政策会议强调全面加强基础设施建设,尽快构建现代化基础设施体系。基建历来是稳增长最直接有效的方法之一,特别是新老基建行业上游企业,有较好的成长性,积极加码基建相关业务,二季报跌停!跌停!还是跌停!纪念股市大佬爆仓破产史给股民拉响警报那是2012年,我们都怀着对大学的美好憧憬进去了北京的某985高校,打算开始自己的大学生活。我是贵州山咔咔里面的,从小就野惯了,属于留守儿童,从小学一年级开始父母就没有去过学校,爸中央财经委员会第十一次会议精神解读建筑业新一轮发展机遇来了?引子2022年4月26日,中央财经委员会召开第十一次会议,研究全面加强基础设施建设问题。看到这种信号,对于建筑企业而言,一定是一种全新的更大的机遇。危机中蕴藏的机遇历史运行似乎总是李大霄沪指跌破3000点不要恐慌,要从容面对处理好家庭关系,生活比股票重要金融界4月25日消息4月25日,沪指低开低走,盘中跌破3000点,刷新2020年7月以来新低。截至发稿,沪指下挫跌逾4。00,深成指跌4。99,创业板指跌4。44。目前两市下跌个股寿命与体重的关系被发现60岁以后,这样的体重或刚好,不妨自查导语随着年龄的增长,身体各个机能出现逐渐下降的趋势,人体也会表现出各种衰老症状,这种现象是不可避免的。生老病死,乃人之常情,拥有健康长寿的好身体是每个人的愿望,人们也会通过各种养生晚餐与寿命有关系?不想减寿,晚餐尽量别吃4类食物据了解,要保持健康饮食恰当很重要,吃晚餐注意多方面问题。很多人吃晚餐的时候没有选择适合的食物提供营养,会在饮食错误的威胁下出现疾病,这样反而无法收获好处。因此,要了解身体的保养技巧