作者 | 码农的荒岛求生

来源 | 码农的荒岛求生

之前很多同学在微信上问能不能讲讲异步编程是怎么一回事儿,今天就和大家简单聊一聊这个话题。

我们以函数调用为例,假设有这样的代码:

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

代码非常简单,B函数读取一个文件,文件里保存的是一行行数据,然后加和,A函数中的某个位置调用B函数。

此时,我们说这是同步调用,因为A函数后续代码必须等待B函数处理完文件才能继续执行。

随着业务不断发展,B函数处理的文件越来越庞大,此时处理一次文件耗时2小时,假设A函数后还有一行重要的代码:

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

这就意味着调用B函数后需要等待2个小时才能执行到something_important这行代码,而something_important函数对时间要求非常苛刻,该怎样改进呢?

其实很简单,我们可以在B函数内部创建一个线程,在线程中处理文件:

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异步于文件处理。

如果是在单核系统下,CPU会不断在处理文件线程和A函数线程间切换,看上去这两个线程就好像在同时运行,但如果是在多核系统下,这两个线程可以真正的并行起来。

在编程语境下,异步往往和线程进程等相关

最后举一个例子。

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

而异步就好比去吃大餐,你在座位上看菜单点菜,其它人也可以点菜,你不需要等待其它人吃完饭才能下单,这时我们说你点菜和其它人吃饭是异步的。

往期推荐

直接root Android设备,你知道吗?

我们到底需要什么样的低代码平台?

清华大学:2021元宇宙研究报告

Mendix 发布全球低代码报告

点分享

点收藏

点点赞

点在看

异步编程到底在说啥?相关推荐

  1. java 怎么写异步方法_java如何学习异步编程?

    昨天头儿给的学习文档我还没看完,头儿说:"MongoDB光会简单的添删改查什么的不行,要深入了解,你们连$set和$inc使用场景都分不清." 确实,学习过一年多SQL,确实对学习 ...

  2. 增效降本开源节流,2022年技术趋势前瞻(异步编程/容器技术)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_204 2022初始,凛冬已至,疫情横跳, 环境繁复,君不见互联网大厂纷纷裁员,银根紧缩.这一切归结为两个字:成本.对于互联网企业来 ...

  3. 深入理解javascript异步编程障眼法h5 web worker实现多线程

    0.从一道题说起 var t = true; setTimeout(function(){ t = false; }, 1000); while(t){ } alert('end'); 1 2 3 4 ...

  4. mysql 数据库引擎切花_asyncio异步编程【含视频教程】

    不知道你是否发现,身边聊异步的人越来越多了,比如:FastAPI.Tornado.Sanic.Django 3.aiohttp等. 听说异步如何如何牛逼?性能如何吊炸天....但他到底是咋回事呢? 本 ...

  5. 赠书:响应式编程到底是什么?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 最近几年,随着Go.Node 等新语言.新技术的出现,J ...

  6. Async和Await如何简化异步编程几个实例

    引言 C#5.0中async和await两个关键字,这两个关键字简化了异步编程,之所以简化了,还是因为编译器给我们做了更多的工作,下面就具体看看编译器到底在背后帮我们做了哪些复杂的工作的. 同步代码存 ...

  7. .NET中的异步编程(四)- IO完成端口以及FileStream.BeginRead

    本文首发在IT168 写这个系列原本的想法是讨论一下.NET中异步编程风格的变化,特别是F#中的异步工作流以及未来的.NET 5.0中的基于任务的异步编程模型.但经过三篇文章后很多人对IO异步背后实现 ...

  8. 阿里淘宝一直在推的响应式编程到底是个什么鬼?

    随着这些年智能手机的发展和普及,我们的服务器端要应对日益增长的巨大流量. 从开发的角度来看,这就要求我们必须设计出高扩展性和高可用性的程序,以确保能够适应日益增长的请求所带来的压力. 而从使用者的角度 ...

  9. python异步编程视频_asyncio异步编程【含视频教程】

    Python Python开发 Python语言 asyncio异步编程[含视频教程] 不知道你是否发现,身边聊异步的人越来越多了,比如:FastAPI.Tornado.Sanic.Django 3. ...

最新文章

  1. SIFT: This algorithm is patented and is excluded in this configuration的解决办法
  2. 列出本地git仓库中的文件?
  3. linux ssh 报错 Failed to start OpenSSH Server daemon
  4. 【ijkplayer】编译 Android 版本的 ijkplayer ④ ( 安装 make yasm 软件 | 执行 compile-ffmpeg.sh all 命令编译 ffmpeg )
  5. 1.5 卷积步长-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  6. 手把手教你用 elementUI 实现导航栏
  7. 21 年总结:文章的盘点和写作背景
  8. javacript IO
  9. Unity3D基础19:Tag标签
  10. External Libraries中没有Maven的jar包的原因(已解决)
  11. 西门子1200plc与施耐德变频器modbus通讯程序
  12. c语言precede函数怎么构造,数据结构——栈的应用(表达式求值)(C语言)
  13. 怎么用计算机求5次根号,学生用计算器上面5次根号怎么按?
  14. 详解pandas编码函数pd.factorize()
  15. 微信小程序车辆登记+后台管理系统
  16. 2019年9月总结,10月展望
  17. 随笔:说说第一次在android中嵌入非全屏显示的unity游戏时的坑之——界面切换时出现延迟/卡顿/花屏等现象解决方法
  18. 索辰科技在科创板过会:拟募资金额有所下调,上半年亏损4000万元
  19. Python学习 day04打卡
  20. 讲师秀之7:林仕鼎谈架构设计与架构师

热门文章

  1. mysql安装被打断_Mysql的安装/性能优化/安全加固
  2. java script中定义的var变量怎么在body中使用,深入分析JavaScriptvar中的预解析与副作用...
  3. 安卓线程同步面试_Android面试题
  4. 怎样设计访谈提纲_论访谈提纲的设计
  5. 年仅48岁,985高校教授离世
  6. 俄国数学家称:“平行线可以相交”,却遭到质疑,死后12年被证实
  7. 清华王兴再抛神论:为什么教育决定着中国餐饮业质量?
  8. AI算法连载02:概率论基础
  9. 2020考研备考:中国大学最顶尖学科名单——数学
  10. 为什么R语言是学习数据分析的第一选择