异步编程简介

前言

本人学习.Net两年有余,是第一次写博客,虽然写的很认真,当毕竟是第一次,肯定会有很多不足之处,

希望大家照顾照顾新人,有错误之处可以指出来,我会虚心接受的。

何谓异步

  • 与同步相对应,异步指的是让CPU暂时搁置当前请求的响应,处理下一个请求,当通过轮询或其他方式得到回调通知后,

    开始运行。多线程将异步操作放入另一线程中运行,通过轮询或回调方法得到完成通知,但是完成端口,由操作系统接管

    异步操作的调度,通过硬件中断,在完成时触发回调方法,此方式不需要占用额外线程。
  • 异步编程正在被使用的的越来越多,主要就是解决处理并发方面;那什么是并发呢?并发指的就是某个时间段,多个用户同时访问

    造成的阻塞现象。很多人都有个误解,觉得异步编程能缩短我们处理某个任务的时间,其实并没有.

异步与多线程的异同点

  • 两者都可以达到避免调用线程阻塞的目的,异步使用的是线程池中的线程,没有额外的线程负担,

    并且使用回调的方式进行处理,与普通人的思维方式有些出入,而且难以调试。多线程的处理方式

    依然是顺序执行,符合常人的思维方式,所以编程较简单,但会带来额外的线程负担,并且线程间

    的共享变量可能会造成死锁的出现。而且线程也是对象也需要占用内存,因此线程月多占用内存也

    越多,多线程能缩短某个处理任务的时间,异步编程则不能。

理解多线程

  • 在某个时间段,也许我们想缩短我们处理某个任务的时间,这个时候绝不是使用

    异步,而是使用多线程。举个例子,超市大减价期间去购物的话,每条结账队伍都会

    排了几十人,假设你购物需要20分钟,结账就要排队20分钟,这样你就要40分钟才能

    购物完毕。这个时候就要开启多线程,你叫你的朋友去结账哪里排队,而你就去购物,

    这样当你购完物时就刚好到你结账的时候,这样你就只需要20分钟就能购物完毕,足足

    减少了20分钟,虽然这种行为很贱,但这就是多线程编程

多线程扩展知识点

  • 多个线程之间通过抢得处理器时间来执行,例如,A线程执行300毫秒后,可能会轮到

    B线程执行,A线程会暂停(挂起);当B线程执行一段时间后,又轮到A线程继续执行。由于

    处理器时间片很短,人们很难察觉,好像某个线程一直在执行一样.

为什么要使用异步编程

  • 在执行较为耗时的操作时,很容易出现用户界面卡顿现 ,用户会以为应用程序崩溃,从而将

    应用程序强制结束。这样做会导致两个结果:一是应用程序希望完成的操作无法顺利进行;

    二是可能会造成数据的丢失。所以在执行耗时操作时应当选择异步编程,将耗时操作的代码

    放到另一个线程上执行,这样不会阻塞用户界面线程的继续执行,用户界面也不会卡顿,极大地

    提升用户界面的响应速度,使用户体验度更好。

异步编程方案

  • 使用Thread类进行异步编程
  • 使用Task对象启动异步操作
  • 异步等待语法(async/await)

关于异步为什么会跑在原始线程上?个人见解,有错误的话请园友们指出

  • await操作并没有开启新线程,只有遇到到Async方法才会开启,并把主线程返回给线程池中例如client.GetAsync()这类方法,

    当await操作等待GetAsync()完成后,会从线程池中随机调出一个空闲线程继续执行,这个线程有可能是

    GetAsync()执行完后释放掉的,也有可能是之前的主线程或其他线程,所以输出的线程ID才有可能全是主线程的ID。

  • 异步方法主要就是不让线程池里的线程闲着没事干,充分利用
  • async/await的介绍在下一篇博客异步编程系列(二)

C#异步编程(一)的更多相关文章

  1. C#与C++的发展历程第三 - C#5.0异步编程巅峰

    系列文章目录 1. C#与C++的发展历程第一 - 由C#3.0起 2. C#与C++的发展历程第二 - C#4.0再接再厉 3. C#与C++的发展历程第三 - C#5.0异步编程的巅峰 C#5.0 ...

  2. 关于如何提高Web服务端并发效率的异步编程技术

    最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...

  3. 异步编程 In .NET

    概述 在之前写的一篇关于async和await的前世今生的文章之后,大家似乎在async和await提高网站处理能力方面还有一些疑问,博客园本身也做了不少的尝试.今天我们再来回答一下这个问题,同时我们 ...

  4. C#异步编程(二)

    async和await结构 序 前篇博客异步编程系列(一) 已经介绍了何谓异步编程,这篇主要介绍怎么实现异步编程,主要通过C#5.0引入的async/await来实现. BeginInvoke和End ...

  5. [.NET] 利用 async & await 的异步编程

    利用 async & await 的异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/5922573.html  目录 异步编程的简介 异 ...

  6. [.NET] 怎样使用 async & await 一步步将同步代码转换为异步编程

    怎样使用 async & await 一步步将同步代码转换为异步编程 [博主]反骨仔 [出处]http://www.cnblogs.com/liqingwen/p/6079707.html  ...

  7. [C#] 走进异步编程的世界 - 开始接触 async/await

    走进异步编程的世界 - 开始接触 async/await 序 这是学习异步编程的入门篇. 涉及 C# 5.0 引入的 async/await,但在控制台输出示例时经常会采用 C# 6.0 的 $&qu ...

  8. C#异步编程

    什么是异步编程 什么是异步编程呢?举个简单的例子: using System.Net.Http; using System.Threading.Tasks; using static System.C ...

  9. 深入解析js异步编程利器Generator

    我们在编写Nodejs程序时,经常会用到回调函数,在一个操作执行完成之后对返回的数据进行处理,我简单的理解它为异步编程. 如果操作很多,那么回调的嵌套就会必不可少,那么如果操作非常多,那么回调的嵌套就 ...

随机推荐

  1. jQuery实践-网页版2048小游戏

    ▓▓▓▓▓▓ 大致介绍 看了一个实现网页版2048小游戏的视频,觉得能做出自己以前喜欢玩的小游戏很有意思便自己动手试了试,真正的验证了这句话-不要以为你以为的就是你以为的,看视频时觉得看懂了,会写了, ...

  2. 将表里的数据批量生成INSERT语句的存储过程 增强版

    将表里的数据批量生成INSERT语句的存储过程 增强版 有时候,我们需要将某个表里的数据全部或者根据查询条件导出来,迁移到另一个相同结构的库中 目前SQL Server里面是没有相关的工具根据查询条件 ...

  3. 浅谈 jQuery 核心架构设计

    jQuery对于大家而言并不陌生,因此关于它是什么以及它的作用,在这里我就不多言了,而本篇文章的目的是想通过对源码简单的分析来讨论 jQuery 的核心架构设计,以及jQuery 是如何利用javas ...

  4. 使用webstorm+webpack构建简单入门级“HelloWorld”的应用&&引用jquery来实现alert

    使用webstorm+webpack构建简单入门级"HelloWorld"的应用&&构建使用jquery来实现 1.首先你自己把webstorm安装完成. 请参考这 ...

  5. 如何创建Vim Dotfile?

    Dotfile是电脑系统里的隐藏文件,它是专门给更高级的用户,如开发者.程序员或工程师使用的,让他们用来调整系统.如何创建Vim-Dotfile? 可以参考以下步骤: 1. 首先,你要检查一下.vim ...

  6. mac下安装及配置tomcat

    mac下的软件不像windows下的程序那样写注册表,对于tomcat的安装来说,在mac下是名符其实的绿色软件,具体操作如下: 1.到 apache官方主页 下载完整 tar.gz文件包.(没有专门 ...

  7. docker – 你应该知道的10件事

      容器并不是一个全新的技术,但这并不妨碍Docker如风暴一样席卷整个世界. 如果你在IT圈里,你一定听说过Docker.就算与其他热门技术,如:Puppet/Chef,Hadoop或者MongoD ...

  8. java中的移位运算符:<<,>>,>>>总结

    java中有三种移位运算符 <<      :     左移运算符,num << 1,相当于num乘以2 >>      :     右移运算符,num >& ...

  9. click事件的累加绑定,绑定一次点击事件,执行多次

    最近做项目为一个添加按钮绑定点击事件,很简单的一个事情,于是我按照通常做法找到元素,使用jquery的on()方法为元素绑定了点击事件,点击同时发送请求.完成后看效果,第一次点击没有问题.再一次点击后 ...

  10. 机器指令翻译成 JavaScript —— No.7 过渡语言

    上一篇,我们决定使用 LLVM 来优化程序,并打算用 C 作为输入语言.现在我们来研究一下,将 6502 指令转换成 C 的可行性. 跳转支持 翻译成 C 语言,可比 JS 容易多了.因为 C 支持 ...