异步编程async/await

什么是异步?

在异步程序中,程序代码不需要按照编写时的顺序严格执行,有时需要一在一个新的线程中运行一部分代码,有时无需创建新的 线程,但是为了更好的利用单个线程的能力,需要改变代码的执行顺序。

进程

启动程序时,系统会在内存中创建一个新的进程。进程是构成运行程序的资源的集合,这些资源包括虚地址空间、文件句柄和许多其他程序运行所需的东西。

线程

在进程内部,系统创建一个称为线程的内核对象,它代表了真正执行的程序。线程是执行线程的简称。一旦线程建立,系统会在Main方法的第一句开始线程的执行。

线程知识点:

1、默认情况下,一个进程只包含一个线程,从程序的开始一直执行到结束。

2、线程可以派生其他线程,因此在任何时刻,一个进程都可能包含不同状态的多个线程,来执行程序的不同部分。

3、如果一个进程拥有多个线程,它们将共享进程的资源。

4、系统为处理器执行所规划的单元是线程,不是进程。

为什么需要异步编程?

一个服务器程序可能会持续不断在发起到其他服务器的连接,并向他们请求数据,同时处理来自多个客户端程序的请求,这种通信任务往往耗费大量时间,在此期间程序只能等待网络或者互联网上其他计算机的响应,这严重削弱了性能。程序不应该浪费等待响应的时间,而应该更加高效,在等待的同时执行其他任务,回复到达后再继续执行第一个任务。

实例:

call1和call2占用了大部分时间,不管哪次调用,绝大部分时间都浪费在等待网站的响应上。

如果我们能初始化两个CountCharater调用,无需等待结果,而是直接执行4个CountToAlageNumber调用,然后在两个CountCharacter方法调用结束时在获取结果,就可以明显的提升性能。

结果如下:

async/await版本的程序的时间轴

时间: 2024-11-08 05:57:55

异步编程async/await的相关文章

异步编程Async/await关键字

异步编程Async \await 关键字在各编程语言中的发展(出现)纪实. 时间 语言版本 2012.08.15 C#5.0(VS2012) 2015.09.13 Python 3.5 2016.03 ECMAScript 2016 (ES7) C#中的用法和浅层次原理 我是占位代理 Python中的用法,和协程 我是占位代理 Javascript中的说明 我是占位代理,不懂具体用法.

.net 异步编程async & await关键字的思考

C# 5.0引入了两个关键字 async和await,这两个关键字在很大程度上帮助我们简化了异步编程的实现代码,而且TPL中的task与async和await有很大的关系 思考了一下异步编程中的async & await关键字,对两个关键字尤其是await关键字一直很迷糊,因此深入思考了一下.首先借助的示例是:[你必须知道的异步编程]C# 5.0 新特性--Async和Await使异步编程更简单这是博客园一个大牛写的,自己也一直关注这个大神,不得不说,博客园大神很多,而且氛围也很好.我引入了其中

[C#] 谈谈异步编程async await

为什么需要异步,异步对可能起阻止作用的活动(例如,应用程序访问 Web 时)至关重要. 对 Web 资源的访问有时很慢或会延迟. 如果此类活动在同步过程中受阻,则整个应用程序必须等待. 在异步过程中,应用程序可继续执行不依赖 Web 资源的其他工作,直至潜在阻止任务完成. 本节将一步一步带领大家理解async和await. 期间会有 Hello World,原理介绍,异步会提高程序的运行速度吗,async和await,MVC中的异步Action,以及线程中常涉及到的线程安全和信号量,以及微软提供

c#异步编程async await

可以代替协程了 但是需要.net4 版本 unity2017以上版本可以用了 再也可以不用蛋疼的没有返回值的协程了 //异步编程,和Task一起用 async void TestAsync(){ //等待2秒 await Task.Delay(2000); int a = 0; while (a < 20) { //空等待 await Task.Yield();//相当于 yield return null a++; print(a); } print("haha"); } 原文

JavaScript异步编程——Async/Await vs Promise

兼容性 提醒一下各位,Node 现在从版本 7.6 开始就支持 async/await 了.而就在前几天,Node 8已经正式发布了,你可以放心地使用它. 如果你还没有试过它,这里有一堆带有示例的理由来说明为什么你应该马上采用它,并且再也不会回头. Async/await  对于那些从未听说过这个话题的人来说,如下是一个简单的介绍: Async/await 是一种编写异步代码的新方法.之前异步代码的方案是回调和 promise. Async/await 实际上是建立在 promise 的基础上.

[记录]python异步编程async/await实现

from selectors import DefaultSelector, EVENT_READ, EVENT_WRITE import socket from types import coroutine from urllib.parse import urlparse @coroutine def until_readable(fileobj): yield fileobj, EVENT_READ @coroutine def until_writable(fileobj): yield

Async in C# 5.0(C#中的异步编程Async) 蜗牛翻译之第一章

p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提高下英文,用我拙劣的英文翻译一些重要的部分,纯属娱乐,简单分享,保持学习,谨记谦虚. 如果你觉得这件事儿没意义翻译的又差,尽情的踩吧.如果你觉得值得鼓励,感谢留下你的赞,祝各位爱技术的园友在今后每一次应该猛烈突破的时候,不选择知难而退.在每一次应该独立思考的时候,不选择随波逐流,应该全力以赴的时候,不选择尽力

.NET4.5 异步编程 async和await

msdn介绍:https://msdn.microsoft.com/zh-cn/library/hh191443.aspx 其实很简单,标记了async的方法为异步方法,从方法的左大括号开始同步执行,直到第一个await出现就开始异步执行,主线程等待,等带await这行代码异步完了再回到主线程,然后继续往下执行. 如果后面又遇到带await语句的,又异步执行,执行完了就回来,继续同步往下.依此类推. 这样做其实就把我们以前编写等待句柄接收信号的代码给省掉了,就一个await就搞定. Visual

异步编程- async和await

html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,code,del,dfn,em,img,ins,kbd,q,s,samp,small,strike,strong,sub,sup,tt,var,b,u,i,center,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption