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 ...
随机推荐
- php 多维数组转二维数组
array(3) { ["money"]=> string(6) "255.00" ["id"]=> string(1) &qu ...
- P4098 [HEOI2013]ALO
最近这个家伙去哪了,为啥一直不更博客了呢?原来他被老师逼迫去补了一周的文化课,以至于不会把班里的平均分拉掉太多.好了,我们来看下面这道题目: P4098 [HEOI2013]ALO 题目描述 Welc ...
- 《剑指offer》二叉树的深度
本题来自<剑指offer> 反转链表 题目: 思路: C++ Code: Python Code: 总结:
- 2018-2019-3 20165314《网络对抗技术》Exp2 后门原理与实践
1.实验内容 任务一:使用netcat获取主机操作Shell 1.在Windows下使用ipconfig查看本机IP: 2.使用ncat.exe程序监听本机的5314端口: 3.在Kali环境下,使用 ...
- 4.1 ORACLE DATAGUARD SWITCHOVER 步骤
验证主库是否能执行角色转换到备库 原主库执行 SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE; SWITCHOVER_STATUS --------- ...
- window10 蓝牙只能发不能收文件解决办法
打开“通过蓝牙发送和接收文件”,在“接收文件”界面中无法接收蓝牙发送的文件 解决办法: 1. win+R后,输入msconfig,回车 2. 点击服务,勾选隐藏Microsoft服务,点击全部禁用 3 ...
- linux swap空间的swappiness=0
linux 会使用硬盘的一部分做为SWAP分区,用来进行进程调度--进程是正在运行的程序--把当前不用的进程调成‘等待(standby)‘,甚至‘睡眠(sleep)’,一旦要用,再调成‘活动(acti ...
- python中网络编程
网络编程软件架构介绍: C/S:客户端,服务端 B/S:浏览器,服务端 # 常见应用: 1.手机端看着感觉是c/s架构其实更多的是b/s架构,例如微信小程序,支付宝第三方接口 2.pc端:b/s比较火 ...
- ubuntu中vi下删除键和上下左右键的异常解决
解决办法: 卸载旧的vim apt-get remove vim-common 安装新的vim apt-get install vim tips:可是我发现,无论卸载还是安装都是版本为(2 ...
- python3_list
name = ['like','new','book',['fa','fdsa'],'new','book','why']#这是个列表 print(name)#把列表打印出来 查 print(name ...