异步和多线程可以说没有必然的联系,只能说异步可以通过多线程实现而已
要理解这些东西,你得具备很多相关的知识,操作系统原理,编译原理等
简单地来说,计算机或者说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. js正则表达式大全(转)

    1. 正则表达式规则 1.1 普通字符 字母.数字.汉字.下划线.以及后边章节中没有特殊定义的标点符号,都是"普通字符".表达式中的普通字符,在匹配一个字符串的时候,匹配与之相同的 ...

  2. (转)java 从jar包中读取资源文件

    (转)java 从jar包中读取资源文件 博客分类: java   源自:http://blog.csdn.net/b_h_l/article/details/7767829 在代码中读取一些资源文件 ...

  3. 更改CI框架默认访问路径及去掉index.php

    下面是去掉index.php的操作 PHP CodeIgniter(CI)去掉 index.php - Langjun - 博客园 设置访问的默认路径是在

  4. Android SQLITE数据类型

    2011-6-24 15:14:00来源:Sql   SQLITE数据类型 SQLite与其他常见的DBMS的最大不同是它对数据类型的支持.其他常见的DBMS通常支持强类型的数据,也就是每一列的类型都 ...

  5. css 弹出框

    最近想弄一个类似登陆框的那种弹出框,其实网上已经有很多例子,而且也有相应的插件,例如:jquery-ui的,可直接使用,而我就简单的弄了个简易版的登陆框,真的很简易. 其实原理就是设置两个div,一个 ...

  6. OSD的主要实现方法和类型(转)

    源:OSD的主要实现方法和类型 目前有两种主要的OSD实现方法:外部OSD发生器与视频处理器间的叠加合成;视频处理器内部 支持OSD,直接在视频缓存内部叠加OSD信息. 外部OSD发生器与视频处理器间 ...

  7. IOS9提示“不受信任的开发者”如何处理

    iPhone升级到IOS9版本后,发现部分APP在下载后首次运行时,都会提示“不受信任的应用程序开发者”,这是因为企业证书发布的APP,没有经过AppStore审核,于是iOS对用户做出一个安全性的提 ...

  8. random 函数

    Random()在Delphi中,有一随机函数,是这样定义的:function Random [ ( Range: Integer) ]; 其中,参数Range为一整数,该函数返回值也为整数,其范围为 ...

  9. Tsinsen-A1490 osu! 【数学期望】

    问题描述 osu!是一个基于<押忍!战斗!应援团><精英节拍特工><太鼓达人>等各种音乐游戏做成的一款独特的PC版音乐游戏.游戏中,玩家需要根据音乐的节奏,通过鼠标 ...

  10. 关于浏览器和HTTP协议

    关于浏览器 浏览器的主要功能就是向服务器发出请求,在浏览器窗口中展示想要访问的网络资源.这里资源一般是指 HTML 文档,图片等其他的类型.资源的位置由用户使用 URL(统一资源标示符)指定. 而浏览 ...