当前位置:首页 > 科技  > 软件

彻底理解异步编程!你理解了吗?

来源: 责编: 时间:2024-03-18 09:41:29 245观看
导读大家好,我是小风哥。之前很多同学在微信上问能不能讲讲异步编程是怎么一回事儿,今天就和大家简单聊一聊这个话题。我们以函数调用为例,假设有这样的代码:void B() { lines = read(filename); sum(lines);}void A() { .

大家好,我是小风哥。IvG28资讯网——每日最新资讯28at.com

之前很多同学在微信上问能不能讲讲异步编程是怎么一回事儿,今天就和大家简单聊一聊这个话题。IvG28资讯网——每日最新资讯28at.com

我们以函数调用为例,假设有这样的代码:IvG28资讯网——每日最新资讯28at.com

void B() {  lines = read(filename);  sum(lines);}void A() {  ...  B();  ...}

代码非常简单,B函数读取一个文件,文件里保存的是一行行数据,然后加和,A函数中的某个位置调用B函数。IvG28资讯网——每日最新资讯28at.com

此时,我们说这是同步调用,因为A函数后续代码必须等待B函数处理完文件才能继续执行。IvG28资讯网——每日最新资讯28at.com

随着业务不断发展,B函数处理的文件越来越庞大,此时处理一次文件耗时2小时,假设A函数后还有一行重要的代码:IvG28资讯网——每日最新资讯28at.com

void A() {  ...  B();  something_important();  ...}

这就意味着调用B函数后需要等待2个小时才能执行到something_important这行代码,而something_important函数对时间要求非常苛刻,该怎样改进呢?IvG28资讯网——每日最新资讯28at.com

其实很简单,我们可以在B函数内部创建一个线程,在线程中处理文件:IvG28资讯网——每日最新资讯28at.com

void handle_file() {  lines = read(filename);  sum(lines);}void B() {  thread t(handle_file);}void A() {  ...  B();  something_important();  ...}

这样B函数被调用后创建完线程即可立即返回,紧接着开始执行something_important这行代码,CPU在执行something_important这行代码时可能文件还没有开始处理,这样函数A不再依赖于文件处理,这时我们说函数B函数就是异步调用的,函数A异步于文件处理。IvG28资讯网——每日最新资讯28at.com

如果是在单核系统下,CPU会不断在处理文件线程和A函数线程间切换,看上去这两个线程就好像在同时运行,但如果是在多核系统下,这两个线程可以真正的并行起来。IvG28资讯网——每日最新资讯28at.com

在编程语境下,异步往往和线程进程等相关。IvG28资讯网——每日最新资讯28at.com

最后举一个例子。IvG28资讯网——每日最新资讯28at.com

同步就好比你排队去自助售票机取电影票(话说小风哥已经很久很久没有去电影院看电影了),你必须排队等待前一个人取完电影票才能到你,你不能在前一个取票的过程中取自己的票,这时我们说取电影票时你和前一个人是同步的。IvG28资讯网——每日最新资讯28at.com

而异步就好比去吃大餐,你在座位上看菜单点菜,其它人也可以点菜,你不需要等待其它人吃完饭才能下单,这时我们说你点菜和其它人吃饭是异步的。IvG28资讯网——每日最新资讯28at.com

好啦,这篇就到这里,希望对大家有所帮助。IvG28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-76519-0.html彻底理解异步编程!你理解了吗?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 2024编程新趋势:JavaScript高手的秘密武器Rust

下一篇: Bind、Call、Apply的区别?如何实现bind

标签:
  • 热门焦点
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • 2023年Q2用户偏好榜:12+256G版本成新主流

    3月份的性能榜、性价比榜和好评榜之后,就要轮到2023年的第二季度偏好榜了,上半年的新机潮已经过去,最明显的肯定就是大内存和存储的机型了,另外部分中端机也取消了屏幕塑料支架
  • 谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌在KDD 2023发表了一篇工作,探索了推荐系统ranking模型的训练稳定性问题,分析了造成训练稳定性存在问题的潜在原因,以及现有的一些提升模型稳定性方法的不足,并提出了一种新
  • 自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中扮演着重要角色,它提升了DevOps的效能。通过自动化工具和方法,DevOps团队可以实现以下目标:消除手动和重复性任务。简化流程。在整个软件开发生命周期中实现更
  • 一文掌握 Golang 模糊测试(Fuzz Testing)

    模糊测试(Fuzz Testing)模糊测试(Fuzz Testing)是通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。可以用来发现应用程序、操作系统和网络协议等中的漏洞或
  • “又被陈思诚骗了”

    作者|张思齐 出品|众面(ID:ZhongMian_ZM)如今的国产悬疑电影,成了陈思诚的天下。最近大爆电影《消失的她》票房突破30亿断层夺魁暑期档,陈思诚再度风头无两。你可以说陈思诚的
  • 机构称Q2国内智能手机销量同比下滑4% vivo份额重回第1

    7月29日消息,根据市场调查机构Counterpoint Research公布的最新报告,2023年第2季度中国智能手机销量同比下降4%,创新自2014年以来第2季度销量新低。报
  • 2021中国国际消费电子博览会与青岛国际软件融合创新博览会新闻发布会隆重举行

    9月18日,2021中国国际消费电子博览会与青岛国际软件融合创新博览会新闻发布会在青岛国际新闻中心隆重举行。发布会上青岛市政府领导联袂出席,对本次双展会情
  • 北京:科技教育体验基地开始登记

      北京“科技馆之城”科技教育体验基地登记和认证工作日前启动。首批北京科技教育体验基地拟于2023年全国科普日期间挂牌,后续还将开展常态化登记。  北京科技教育体验基
Top