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

谈谈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 密集型任务。在某些编程语言中难以实现。

青年说汶川哥哥刷屏,长大后我就成了你王菊林曹茜茜9月7日,在四川泸定地震救援现场,一名年轻的森林消防员双手托起一个婴儿的画面令人动容。他肩章上的汶川二字特别显目。网友们叫他汶川哥哥,说这是看见光,成为光的最好写照。画恒大有望大调整!或启用前国足主帅挑大梁,郑智未来将有新安排日前,恒大在上一轮中超输给梅州客家之后,球队已经遭遇了7轮不胜。恒大7轮不胜让球队本赛季的保级前景,就不太乐观。恒大如今只有12个积分,位列联赛积分榜倒数第三。在这种情况下,球队还青春存浩气,梦与情共歌青春存浩气,梦与情共歌当前,国际形势继续发生深刻复杂变化,百年变局和世纪疫情相互交织,世界进入新的动荡变革期,国内改革发展稳定任务艰巨繁重。作为新时代的青年要承担时代的责任不断学习7岁小学生200米跑出36秒,专业教练未来可期极目新闻记者余渊刘楒睿因200米短跑比赛中,跑出36秒的成绩,浙江省丽水市遂昌县梅溪小学的一名二年级女生引发关注。10月15日,有专业教练表示,后期如果孩子参加正规训练,未来可期。17分7板7助!马布里爱徒表现如夏花绚烂霍楠老天赏饭吃的技术北控队赢新疆队3分,收获第二胜CBA常规赛第三轮,迎来了一场焦点比赛,新疆队VS北控队,在此前,新疆队表现十分火热,收获了一波两连胜,令球队上下士气非常高。反观,北控队输给了山东队真爱!阿根廷杀手连拒两大豪门坚守梅阿查得此良将国米未来可期北京时间10月16日晚间,意甲第10轮将拉开战幕,国际米兰将坐镇主场迎战萨勒尼塔纳。对于阿根廷前锋劳塔罗马丁内斯来说,这无疑是他最为喜欢的对手。上赛季两回合比赛,他独中四元率领国米国际法使馆被炸等同宣战,中国使馆被炸后,中央军委准备打仗历史上的社会主义国家南斯拉夫,在上世纪八十年代就已经达到小康水平,成为我们崇拜的对象。然而经济强大不代表国家强大,美国只用了上千架战机,谈笑间就就让其灰飞烟灭。科索沃战争在上世纪末1978年文化部挑选毛主席特型演员,叶剑英看完不敢认真的太像了1976年9月9日,伟大领袖毛主席在北京溘然长逝。从此,天安门观礼台上再也看不到他的英姿,银幕上也再也看不见他那亲切的笑容了。一种莫名的失落感萦绕在全国人民心中,久久不能散去。人民唯美诗光阴的岁月里,有一种爱,叫时刻想念你不说什么过往云烟只愿君心似我心定不负相思意唯愿别有离殇暮然回首是你已经深深地刻在刻在了我的心里为何念念不忘原来我从未忘记过光阴的岁月里有一种爱叫时刻想念你盼相逢就是不相逢没有相伴的上海男篮战胜宁波丁彦雨航表现中规中矩这张彩票何时能中奖?小丁对上海来说是一张彩票。这是休赛期上海男篮与丁彦雨航签约后的评价。而今这张彩票,或许可以给球队带来惊喜。10月14日,经历首场比赛失利的上海男篮第二战对阵宁波,最终以10899击从MMT到沃尔克时刻摘要最近几年西方国家的货币政策可谓是城头变换大王旗,各领风骚一两年。疫情之后,简称为MMT的现代货币理论曾大行其道,成为货币极度宽松的理论依据之一。但随着通胀变成大问题,美欧央行又
旷望祁连尚晴雪,千里冰雪醉酒泉错过了夏天的西瓜,没有得到秋天的奶茶,但我始终相信,冬天的西北风一定有我一口!这种天气的被窝每伸向一块新地方,都是一种探险!不妨跟着小编了解酒泉玉门不一样的冬季特色风景从而尊享高端浙江省这座土豪城市,盛产老板,还被评为最具幸福感城市这里是刘小顺的旅行和生活研究所。浙江省位于我国的华东地区,是长三角的重要组成部分,同时也是一个经济非常发达的省份,一直以来都是富庶发达之地。而说起浙江省的著名城市,肯定很多人都会想乡村爱情15开播,互怼名场面让人忍俊不禁,这才是年的味道1月12日晚,备受瞩目的赵家班新作乡村爱情15正式登陆短视频平台,相较于以前小年夜与广大观众见面,2023年,乡村爱情15开播的时间比以往来得更早一些。正所谓乡爱来了就是年,从首播从妈妈,买绿豆里看慢生活里的烟火气,简单文字里有爱的味道幼儿园老师让孩子在家里认识各种小豆子,玩豆子分类的游戏,还可以讲一下和豆子有关的绘本。我家孩子一下想起妈妈,买绿豆这本书了。这本书当时是因为我要画思维导图所以买了,没想到家里两个孩香港通关,超实用内地香港往返秘籍!1月8日更新之前去香港是需要抗原的,但现在需要48小时核酸!!(!粤康码的凭证就可以)其实往返香港无非就是两种身份香港人or内地人内地人(包括从海外经香港回国的內地人士)去香港不用中兴千兆光网筑基云VR教育创新应用获最佳创新应用案例奖近日,中国通信企业协会主办的ICT中国(2022)优秀案例征集与评选公布了获奖名单,中兴通讯申报的千兆光网筑基云VR教育创新应用,荣获最佳创新应用案例奖。中兴通讯为解决传统职业教育开年逛地标,烟火气里透出经济韧性底色调查观察活力中国新华社北京1月13日电1月12日,新华每日电讯发表题为活力中国烟火气里的信心和期待地标篇的报道。武汉汉正街吆喝声唤醒老商街新华每日电讯记者徐海波一度沉寂的汉正街又热闹起来了。随着春再见2022辞慕尔尔,烟火年年,愿日子清透,世事皆温柔光阴,是纸上的长短,开一句,落一句。谁的去年天气,旧亭台,谁的秋千院落,夜沉沉谁的池塘,入了春草梦,谁的梧叶,染满秋声谁的月色,染了相思,谁的雪色,许了流年。走过2022,翻开岁月2023,我们向着梦想出发一元复始,万象更新。不经意间2022已悄然落幕,过去的一年里,我们经历了挫折也收获了成长,过程中铭刻着我们难忘的故事,不管梦想实现与否,2023已乘风而至,我们会继续迎风斩浪,向着文案挑一句话送给自己吧头条创作挑战赛1。南来北往,不辜负生活,不迷失方向送心2。好好爱自己,把期望降低,把依赖变少,你会过得很好3。别让生活蹂躏了你的眉目和热情。4。将就永远不是我的风格5。生命只有一次贵大的冬澄澈温暖冬日文笔挑战来啦!贵州大学冬意渐浓,岁月轻慢带着一身寒霜,去寻烟火里的暖贵大的冬文笔挑战一月凛冬已至,星河长明我们回忆贵大的冬,将思念成文接下来,让我们来看看那些关于贵大的冬的文笔挑战01hrGui