异步编程async/await

Posted laoyang01

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异步编程async/await相关的知识,希望对你有一定的参考价值。

什么是异步?

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

进程

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

线程

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

线程知识点:

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

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

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

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

为什么需要异步编程?

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

实例:

 

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

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

 结果如下:

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

 

以上是关于异步编程async/await的主要内容,如果未能解决你的问题,请参考以下文章

NET 中的 async/await 异步编程

使用 async/await 进行异步编程

异步编程之Async,Await和ConfigureAwait的关系

[C#] 开始接触 async/await 异步编程

Async await 异步编程说明

异步编程初探async和await