async/await 的理解
1.如果一个方法标记了 async 关键字,那么这个方法被调用时就是异步执行;
2.利用Task运行一个任务,这个任务里的函数也是异步执行;
3.如果一个任务前被标记await,那么等待这个任务执行完成后,才能执行后面的语句, 这是一个同步等待异步过程,因为如果函数要返回任务值,就必须等任务完成。
4.async 和 超线程区别
async 是为了编写更方便,.net4.5前可使用 BeginInvoke和EndInvoke
举个抽象的例子:
4.1 如果你计算机坏了,自己拿去修理,修理计算机需要时间,你守着修理工程师直到修理完毕,工程师把修好的计算机交给你,你取回修好的计算机,这一连串的过程,你时间一直花费在修理计算机这件事上,这叫同步执行。
4.2 还是修理计算机,你把计算机交给维修工程师,留下电话后,就离开做其它事情去了; 维修工程师修好后便再知你去取计算机,你去取回计算机, 这就相当于异步。
4.3你计算机坏了,但是不自己拿去修,而是通知其他人拿去给你修,修好后,别人在帮你拿回去交给你,这就相当于超线程。
第一种情况(sync): 从计算机坏了到计算机被修好再到你取回计算机,你的时间一直被修计算机这件事占用着,直到计算机取回后你才能有时间做其它事。
第二种情况(async):你把计算机交给工程师后,相当于给了工程师一个任务(task),工程师完成任务这段时间,你可以做任何事情,工程师完成任务后,会主动通知你任务完成,让你接手,你接手后时间才会重新花费到修理计算机这件事上。
第三种情况(multiThread): 从头到尾你做的事只是让别人给你做事, 你花费的时间只有交出电脑,收回电脑;好像比async更节省时间?no!让你别人给你做事你就得付出更多的成本;反映到os里就是系统会花费资源去创建新线程和销毁线程,创建/销毁新线程都会花费时间,内存,cpu成本,
而且os线程也不是无限的。
async/await 的理解的更多相关文章
- async/await 深度理解使用
在vue中使用 eg async created () { await setTimeout(()=>{ console.log(1) },5000); }, async mounted () ...
- 关于异步执行(Async/await)的理解(转发)
原文地址: http://blog.jobbole.com/85787/ 同步编程与异步编程 通常情况下,我们写的C#代码就是同步的,运行在同一个线程中,从程序的第一行代码到最后一句代码顺序执行.而异 ...
- async/await到底该怎么用?如何理解多线程与异步之间的关系?
前言 如标题所诉,本文主要是解决是什么,怎么用的问题,然后会说明为什么这么用.因为我发现很多萌新都会对之类的问题产生疑惑,包括我最初的我,网络上的博客大多知识零散,刚开始看相关博文的时候,就这样.然后 ...
- 理解C#中的 async await
前言 一个老掉牙的话题,园子里的相关优秀文章已经有很多了,我写这篇文章完全是想以自己的思维方式来谈一谈自己的理解.(PS:文中涉及到了大量反编译源码,需要静下心来细细品味) 从简单开始 为了更容易理解 ...
- 你眼中的async/await是什么样的?
又到了周末的code review环节,这次code review发现了一个对async/await的理解问题.让我们直奔主题: var foodsSearch = new FoodSearchSer ...
- 8张图让你一步步看清 async/await 和 promise 的执行顺序
摘要: 面试必问 原文:8张图帮你一步步看清 async/await 和 promise 的执行顺序 作者:ziwei3749 Fundebug经授权转载,版权归原作者所有. 为什么写这篇文章? 说实 ...
- 8 张图帮你一步步看清 async/await 和 promise 的执行顺序(转)
https://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&mid=2651555491&idx=1&sn=73779f84c289d9 ...
- js async await 终极异步解决方案
既然有了promise 为什么还要有async await ? 当然是promise 也不是完美的异步解决方案,而 async await 的写法看起来更加简单且容易理解. 回顾 Promise Pr ...
- [转] js async await 终极异步解决方案
阅读目录 回顾 Promise async await 字面理解 async.await 如何执行 await 操作符 总结 既然有了promise 为什么还要有async await ? 当然是pr ...
随机推荐
- Codeforces Round #550 (Div. 3) F. Graph Without Long Directed Paths
F. Graph Without Long Directed Paths time limit per test 2 seconds memory limit per test 256 ...
- 初学python之路-day13
一.函数的嵌套定义 # 概念:在一个函数的内部定义另一个函数 # 为什么要有函数的嵌套定义: # 1)函数fn2想直接使用fn1函数的局部变量,可以讲fn2直接定义到fn1的内部,这样fn2就可以直接 ...
- 漫画:一招学会TCP的三次握手和四次挥手
TCP三次握手和四次挥手的问题在面试中是最为常见的考点之一.很多读者都知道三次和四次,但是如果问深入一点,他们往往都无法作出准确回答. 本篇尝试使用动画来对这个知识点进行讲解,期望读者们可以更加简单地 ...
- kafka Network
Kafka network Processor SocketServer.Processor override def run() { startupComplete() try { while (i ...
- php 常用的知识点归集(下)
24.静态属性与静态方法在类中的使用 需求:在玩CS的时候不停有伙伴加入,那么现在想知道共有多少人在玩,这个时候就可能用静态变量的方法来处理 利用原有的全局变量的方法来解决以上的问题 <?php ...
- C语言作业3
一.实验目的与要求 1.用for语句实现循环 (1)求数列前n项和 掌握for语句实现循环的方法 (2)求数列前n项和 掌握for语句实现循环的方法 循环嵌套的使用 2.用while循环语句实现循环 ...
- python3+Robot Framework+PyCharm第一个WEB UI自动化用例
这里只是列举一个很简单的例子,简单介绍工具的使用,编写用例之前,做好WEB UI自动化的准备工作,下载好chrome驱动(这里以chrome为例,不同浏览器有对应的驱动),注意驱动和浏览器版本要对应, ...
- es6 let 和 const
function test(){ let a = 1 for (let i =0;i<3;i++){ console.log(i) //1,2 } console.log(i) ...
- Ubuntu18.10下配置PHP7.2 + Apache2 + Mysql5.7
方案1:集成解决方案 1.lnmphttps://lnmp.org/ 2.xampphttps://www.apachefriends.org/zh_cn/index.html 3.oneinstac ...
- C#学习-接口与抽象类
接口与抽象类的区别 1.抽象类中可以包含虚方法.非抽象方法和静态成员: 当接口中不能包含虚方法和任何静态成员,并且接口中只能定义方法,不能有具体事项,方法的具体实现由实现类完成. 2.抽象类不能实现多 ...