栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

异步编程(async 和 await)

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

异步编程(async 和 await)

1.概念

异步编程是一项关键技术,可以直接处理多个核心上的I/O阻塞和并发操作

2.使用场景

对于存在IO密集型(例如从网路请求数据、访问数据库和写入到文件系统)和CPU密集型(例如大量的计算)的任务可以选择异步编程

3.异步编程针对于IO密集型任务的优点

针对于服务器端和客户端分别描述

服务器端:

    a:由于没有专门的用于阻止未完成任务的线程,因此服务器线程可以服务更多的Web请求。   

    b:现模拟假设一个场景,有两台服务器,都只有5个线程可用于服务请求,一台运行异步代码,一台不运行异步代码。

    假设这两台服务器都接收6个并发请求,每个请求执行一个I/O操作,未运行异步代码的服务器必须对6个请求排队直到5个线程中的一个完成了I/O密集型工作并编写了响应。假如此时收到了20个请求,由于队列太长,服务器可能开始变慢。运行有异步代码的服务器也需要对6个请求排队,但由于使用了async 和 await,I/O密集型工作开始时,每个线程都会得到释放,无需等到工作结束,收到第20个请求时,传入请求队列将变得很小(如果其中还有请求的话),且服务器不会变慢。 

     c:由于I/O操作在CPU上几乎没有耗时,所以将整个CPU线程专用于执行几乎没有任何作用的工作将是一种资源浪费。

客户端:

     a:使用了async和await对于客户端应用带来的最大好处在于提高了响应能力。例如:手机游戏等应用,在涉及IO时尽可能少的影响UI线程,这点至关重要。

4.异步编程针对于CPU密集型任务的优点

服务器端:

   使用异步编程可以开启另外一个线程来处理这一个CPU密集型的任务,另外一个线程就有可能是多核CPU情况下的另一个核,从而充分的利用了多核CPU的优势。

客户端:

   此优点和上述针对IO密集型任务的一致

5.示例代码展示
private static readonly HttpClient s_client = new HttpClient(); 

static async Task Main(string[] args)
{
     Console.WriteLine("ThreadId:"+Thread.CurrentThread.ManagedThreadId);
     var result = await GetHtmlAsync();
     Console.WriteLine("内容长度:"+result.Length);
     Console.WriteLine("ThreadId:" + Thread.CurrentThread.ManagedThreadId);
}

static Task GetHtmlAsync()
{
     Console.WriteLine("ThreadId:" + Thread.CurrentThread.ManagedThreadId);
     var uri = new Uri("https://www.dotnetfoundation.org");
     return s_client.GetStringAsync(uri);
}

       输出的结果是:

      

Main方法执行到await之后,开始调用GetHtmlAsync方法,这个过程仍然是由线程1再进行,当代码执行到s_client.GetStringAsync(uri)之后,调用方的线程1会闲置下来可以去处理其余的任务,直到整个GetHtmlAsync方法执行完成并返回结果之后,控制权返回到调用方,不过此时是从CPU调度出新的空闲线程来执行接下来的任务,也就是输出线程7。

结尾

本篇博客中一些描述带有自己的个人认识,如有错误,请大家指正

   

                                                                                                        

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/460358.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号