异步编程async/await
什么是异步?
在异步程序中,程序代码不需要按照编写时的顺序严格执行,有时需要一在一个新的线程中运行一部分代码,有时无需创建新的 线程,但是为了更好的利用单个线程的能力,需要改变代码的执行顺序。
进程
启动程序时,系统会在内存中创建一个新的进程。进程是构成运行程序的资源的集合,这些资源包括虚地址空间、文件句柄和许多其他程序运行所需的东西。
线程
在进程内部,系统创建一个称为线程的内核对象,它代表了真正执行的程序。线程是执行线程的简称。一旦线程建立,系统会在Main方法的第一句开始线程的执行。
线程知识点:
1、默认情况下,一个进程只包含一个线程,从程序的开始一直执行到结束。
2、线程可以派生其他线程,因此在任何时刻,一个进程都可能包含不同状态的多个线程,来执行程序的不同部分。
3、如果一个进程拥有多个线程,它们将共享进程的资源。
4、系统为处理器执行所规划的单元是线程,不是进程。
为什么需要异步编程?
一个服务器程序可能会持续不断在发起到其他服务器的连接,并向他们请求数据,同时处理来自多个客户端程序的请求,这种通信任务往往耗费大量时间,在此期间程序只能等待网络或者互联网上其他计算机的响应,这严重削弱了性能。程序不应该浪费等待响应的时间,而应该更加高效,在等待的同时执行其他任务,回复到达后再继续执行第一个任务。
实例:


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

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

结果如下:

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

异步编程async/await的更多相关文章
- 异步编程Async/await关键字
异步编程Async \await 关键字在各编程语言中的发展(出现)纪实. 时间 语言版本 2012.08.15 C#5.0(VS2012) 2015.09.13 Python 3.5 2016.03 ...
- 抓住异步编程async/await语法糖的牛鼻子: SynchronizationContext
长话短说,本文带大家抓住异步编程async/await语法糖的牛鼻子: SynchronizationContext 引言 C#异步编程语法糖async/await,使开发者很容易就能编写异步代码. ...
- 温故知新,CSharp遇见异步编程(Async/Await),聊聊异步编程最佳做法
什么是异步编程(Async/Await) Async/Await本质上是通过编译器实现的语法糖,它让我们能够轻松的写出简洁.易懂.易维护的异步代码. Async/Await是C# 5引入的关键字,用以 ...
- javascript异步编程 Async/await
Async/await Async/await 在学习他之前应当补充一定的 promise 知识 它是一种与 promise 相配合的特殊语法,目前被认为是异步编程的终级解决方案 值得我们每一个人学习 ...
- [C#] 谈谈异步编程async await
为什么需要异步,异步对可能起阻止作用的活动(例如,应用程序访问 Web 时)至关重要. 对 Web 资源的访问有时很慢或会延迟. 如果此类活动在同步过程中受阻,则整个应用程序必须等待. 在异步过程中, ...
- .net 异步编程async & await关键字的思考
C# 5.0引入了两个关键字 async和await,这两个关键字在很大程度上帮助我们简化了异步编程的实现代码,而且TPL中的task与async和await有很大的关系 思考了一下异步编程中的asy ...
- c#异步编程async await
可以代替协程了 但是需要.net4 版本 unity2017以上版本可以用了 再也可以不用蛋疼的没有返回值的协程了 //异步编程,和Task一起用 async void TestAsync(){ // ...
- .NetCore 异步编程 - async/await
前言: 这段时间开始用.netcore做公司项目,发现前辈搭的框架通篇运用了异步编程方式,也就是async/await方式,作为一个刚接触的小白,自然不太明白其中原理,最重要的是,这个玩意如果不明白基 ...
- .net 温故知新:【5】异步编程 async await
1.异步编程 异步编程是一项关键技术,可以直接处理多个核心上的阻塞 I/O 和并发操作. 通过 C#.Visual Basic 和 F# 中易于使用的语言级异步编程模型,.NET 可为应用和服务提供使 ...
随机推荐
- Redis实战——Redis的pub/Sub(订阅与发布)在java中的实现
借鉴:https://blog.csdn.net/canot/article/details/51938955 1.什么是pub/sub Pub/Sub功能(means Publish, Subscr ...
- totoise svn误将桌面作为checkout路径,界面一堆?
工作中由于错误操作,totoise svn检出文件时,直接选择检出路径为桌面,这样导致界面一大堆“?”:看起来比较烦,上网查找处理方案: 其中一个最简单的方法是: 第一步:新建txt文件: 第二步:输 ...
- LUA和C#关于字符串中\0的处理
LUA中: local s = "hello\0\0dddddddd" print(s) --hello C#中: string s = "hello\0\0dddddd ...
- DRBD 数据镜像软件介绍
简介: DRBD (Distributed Replicated Block Device) 分布式块设备复制,是一种基于软件.网络的块复制存储解决方案.主要用于对服务器之间的磁盘.分区.逻辑卷等进行 ...
- 【原】Coursera—Andrew Ng机器学习—Week 11 习题—Photo OCR
[1]机器学习管道 [2]滑动窗口 Answer:C ((200-20)/4)2 = 2025 [3]人工数据 [4]标记数据 Answer:B (10000-1000)*10 /(8*60*60) ...
- Spring DI的配置使用
1.1.1 依赖和依赖注入Spring IOC容器的依赖有两层含义:Bean依赖容器和容器注入Bean的依赖资源:a.Bean依赖容器:也就是说Bean要依赖于容器,这里的依赖是指容器负责创建Bean ...
- C# 调用动态代码
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- python3企业微信群组报警
公司提出一个需求需要做一个企业微信的一个消息推送,需要将消息发送到聊天群里详细信息如下. 如何创建应用请阅读我的上篇文章:https://www.cnblogs.com/wangyajunblog/p ...
- BarcodeLib -- 一个精简而不失优雅的条形码生成库
BarcodeLib -- 一个精简而不失优雅的条形码生成库 引言 在百度进行“C# 条形码”等类似关键字搜索的时候,基本上是使用 ZXing 类库进行条形码的生成.今天我所介绍的是另一款类库 Bar ...
- HBase、HDFS与本地文件系统之间的关系
一.文件系统 1. 概念 所谓文件系统,是操作系统用于明确磁盘或分区上的文件的方法和数据结构:即在磁盘上组织文件的方法.也指用于存储文件的磁盘或分区,或文件系统种类. 2. Local File Sy ...