首页 技术 正文
技术 2022年11月15日
0 收藏 341 点赞 2,799 浏览 1400 个字

异步编程简介

前言

本人学习.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的介绍在下一篇博客异步编程系列(二)

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,086
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,561
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,411
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,184
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,820
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,904