异步和多线程可以说没有必然的联系,只能说异步可以通过多线程实现而已
要理解这些东西,你得具备很多相关的知识,操作系统原理,编译原理等
简单地来说,计算机或者说CPU执行你的代码都是顺序执行的,当前的语句没有执行完,不会执行后面的语句的,这是永远不变的规则!

但是这样的机制会使整个执行效率很低,因为CPU总是要等待当前的语句执行完毕了才会执行后面的代码,而计算机在绝多数的时候都是处于等待用户的输入,等待磁盘文件的读取完成,等待网络数据的传输完成中,所以为了提高整个系统的运行效率,提高CPU的执行效率,计算机系统引入了异步的机制。
异步机制,简单地说就是CPU不会傻傻地处于等待状态,它会先干别的事情,当它需要的东西已经准备完毕后(大多数的情况都是等待外部的输入数据准备完毕,也有些是复杂的计算完毕),硬件系统给CPU一个中断,告诉有了新的数据了,你现在可以去处理了。

这就是最基本的异步原理,而现代操作操作系统对硬件系统做了良好的封装,把很多底层机制屏蔽了,为程序的开发者提供了事件和多线程的概念,让程序的开发者可以更好地利用异步机制。

再说说多线程吧。多线程是计算机引入了操作系统之后才有的概念,至于为什么计算机要引入操作系统,在此就不叙述了,自行了解。多线程的实现有两个方法,一个就是增加CPU的核数和个数,这是最直接的方法,还有一种是采用CPU轮询的方式,每个进程都执行一段时间,又去执行另一个进程的指令,由于切换的速度非常的快,给人的感觉就是同时执行的。

说了这么多,你可能很失望,因为没有代码,没有举例。但我想说的是,用代码无法说明这个问题,不同的操作系统,不同的编程语言,不同的编程框架,对异步和多线程的定义和处理是不一样的,但原理就是这样的。

我们写代码无非就是写一堆的指令去要求CPU执行,同步的方式就是这样的:
我:hi,CPU,我要你做一件事情,而且必须立刻马上就做,因为我正在等着你。
CPU:那你就等着吧,我现在去做。
异步的方式是这样的:
我:hi,CPU,我要你做一件事情,但是不是立刻就做,你可以交给下面的人去做,或者找一个帮手来,我们继续做后面的事情.
CPU:好的,我现在通知硬件去做,等有结果了我通过事件告诉你
或者
CPU:好的,我让另一个核心来做这件事情,我们继续(其实多线程是操作系统实现的,我只是这么举个例子而已)

c#异步和多线程有什么区别和联系?的更多相关文章

  1. C#用委托实现异步,异步与多线程的异同

    异步与多线程的区别(转) 一.异步和多线程有什么区别?其实,异步是目的,而多线程是实现这个目的的方法.异步是说,A发起一个操作后(一般都是比较耗时的操作,如果不耗时的操作就没有必要异步了),可以继续自 ...

  2. C#中异步和多线程的区别

    C#中异步和多线程的区别是什么呢?异步和多线程两者都可以达到避免调用线程阻塞的目的,从而提高软件的可响应性.甚至有些时候我们就认为异步和多线程是等同的概念.但是,异步和多线程还是有一些区别的.而这些区 ...

  3. 【Java_基础】并发、并行、同步、异步、多线程的区别

    1. 并发:位于同一个处理器上的多个已开启未完成的线程,在任意一时刻系统调度只能让一个线程获得CPU资源运行,虽然这种调度机制有多种形式(大多数是以时间片轮巡为主).但无论如何,都是通过不断切换需要运 ...

  4. C#异步和多线程以及Thread、ThreadPool、Task区别和使用方法

    本文的目的是为了让大家了解什么是异步?什么是多线程?如何实现多线程?对于当前C#当中三种实现多线程的方法如何实现和使用?什么情景下选用哪一技术更好? 第一部分主要介绍在C#中异步(async/awai ...

  5. IOS异步和多线程操作&&在sqlite3中的应用

    1,数据库I/O操作(异步) 数据库本身是存储在磁盘上.访问和修改数据库,即对磁盘进行读写,即I/O操作. 磁盘属于计算机硬件,具有DMA能力,不需要CPU干预,可以实现异步操作. I/O操作一般是消 ...

  6. 编写高质量代码改善C#程序的157个建议——建议71:区分异步和多线程应用场景

    建议71:区分异步和多线程应用场景 初学者有时候会将异步和多线程混为一谈.如果对它们之间的区别不是很清楚,很容易写出下面这样的代码: private void buttonGetPage_Click( ...

  7. C#中的异步和多线程

    许多开发人员对异步代码和多线程以及它们的工作原理和使用方法都有错误的认识.在这里,你将了解这两个概念之间的区别,并使用c#实现它们. 我:"服务员,这是我第一次来这家餐厅.通常需要4个小时才 ...

  8. PHP中实现异步调用多线程程序代码

    本文章详细的介绍了关于PHP中实现异步调用多线程方法,下面我们以给1000个用户发送一封推荐邮件,用户输入或者导入邮件账号了提交服务器执行发送来讲述. 比如现在有一个场景,给1000个用户发送一封推荐 ...

  9. C#多线程与异步的区别

    随着拥有多个硬线程CPU(超线程.双核)的普及,多线程和异步操作等并发程序设计方法也受到了更多的关注和讨论.本文主要是想与园中各位高手一同探讨一下如何使用并发来最大化程序的性能. 多线程和异步操作的异 ...

随机推荐

  1. docker rancher 体验 (未完待续.....)

    docker rancher 体验 官方 githubhttps://github.com/rancher/rancher 环境说明: 10.6.0.14010.6.0.18710.6.0.188 修 ...

  2. js实现input button从不可用变为可用

    有时候明明是些很简单的东西,因为自己的一些大意,可能就在那圈子里一直兜兜转转,好久都绕不出来. 所以我也愿意把这些很简单的愚蠢写出来,与君共享~ 首先大家知道<input>有一个名叫“bu ...

  3. js浏览器兼容

    //window.event   IE:有window.event对象   FF:没有window.event对象.可以通过给函数的参数传递event对象.如onmousemove=doMouseMo ...

  4. base库

    /* * 跨浏览器基础库=============================================== * */ //浏览器检测 (function () { window.sys = ...

  5. NOIP模拟赛---1.生气的LJJ (anger)

    LJJ刚上完了一节课!这节课是数学课!他知道了加减属于一级运算,乘除属于二级运算,幂则属于三级运算,而幂的优先级>乘除的优先级>加减的优先级(这是几年级的数学课).但是,从上一套试卷+上一 ...

  6. PAT 天梯赛 L2-1 紧急救援

    Dijkstra算法扩展 题目链接 解题代码如下: #include<cstdio> #include<iostream> #include<algorithm> ...

  7. ASP.NET MVC 5 WEB API 用户验证

    参考博客:ASP.NET MVC5+EF6+EasyUI 后台管理系统(65)-MVC WebApi 用户验证 (1) 参考博客:MVC WebApi 用户验证 (2)构建ASP.NET MVC5+E ...

  8. 关于配置Tomcat的URIEncoding

    遇到的问题: 程序需要发送http GET请求到服务器,请求的参数中包含了中文字符.程序中参数为UTF-8格式,且经过了UTF-8 URL编码再发送.使用的tomcat服务器,但服务器端后台程序中取到 ...

  9. [iOS]C语言技术视频-09-枚举的定义

    下载地址: 链接: http://pan.baidu.com/s/1o625Ee2 密码: 8kp5

  10. js 各种常用js验证

    判断http或者https var http = 'https:' == document.location.protocol ? false : true; js的类型检测方式 /**** js的类 ...