异步编程async/await
Posted laoyang01
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异步编程async/await相关的知识,希望对你有一定的参考价值。
什么是异步?
在异步程序中,程序代码不需要按照编写时的顺序严格执行,有时需要一在一个新的线程中运行一部分代码,有时无需创建新的 线程,但是为了更好的利用单个线程的能力,需要改变代码的执行顺序。
进程
启动程序时,系统会在内存中创建一个新的进程。进程是构成运行程序的资源的集合,这些资源包括虚地址空间、文件句柄和许多其他程序运行所需的东西。
线程
在进程内部,系统创建一个称为线程的内核对象,它代表了真正执行的程序。线程是执行线程的简称。一旦线程建立,系统会在Main方法的第一句开始线程的执行。
线程知识点:
1、默认情况下,一个进程只包含一个线程,从程序的开始一直执行到结束。
2、线程可以派生其他线程,因此在任何时刻,一个进程都可能包含不同状态的多个线程,来执行程序的不同部分。
3、如果一个进程拥有多个线程,它们将共享进程的资源。
4、系统为处理器执行所规划的单元是线程,不是进程。
为什么需要异步编程?
一个服务器程序可能会持续不断在发起到其他服务器的连接,并向他们请求数据,同时处理来自多个客户端程序的请求,这种通信任务往往耗费大量时间,在此期间程序只能等待网络或者互联网上其他计算机的响应,这严重削弱了性能。程序不应该浪费等待响应的时间,而应该更加高效,在等待的同时执行其他任务,回复到达后再继续执行第一个任务。
实例:
call1和call2占用了大部分时间,不管哪次调用,绝大部分时间都浪费在等待网站的响应上。
如果我们能初始化两个CountCharater调用,无需等待结果,而是直接执行4个CountToAlageNumber调用,然后在两个CountCharacter方法调用结束时在获取结果,就可以明显的提升性能。
结果如下:
async/await版本的程序的时间轴
以上是关于异步编程async/await的主要内容,如果未能解决你的问题,请参考以下文章