误解 async
在调试 xxxxasync() 方法的时候,常常会看到调试器界面中会多出一些线程,直觉上误认为 async 冠名的函数是多线程。 对于 stringreader 中的 readasync() 方法的确如此,
readasync() 在内部调用 task.fromresult(),而 task 正是微软提供封装完整的线程池。但是对于 httpclient 中的 getstringasynccore() 则是由 async 修饰的异步函数。
由于多线程和异步函数都可能冠上 async 因此,一开始容易误以为 async 等于 异步。在多线程或异步函数上冠名 async 则是一种默认的命名规范。
异步、多线程的区别
异步 : 属于通信的范畴,在发出消息当下不等待对方回应,便开始继续自己的任务。所以 c# 的很多 _异步_ 操作都在 io 、 socket 这些类库下面,都是通信性质的类库,
io 可以理解向系统内核发送文件数据
多线程 : 属于计算范畴,通常是关于如果利用 cpu 的空闲时间进行计算。
异步同多线程可以完美的结合,服务器开启多个线程监听前端请求,接收处理完毕后,可以异步地将数据序列化到磁盘,当然如果需要知道序列化的结果则异步处理可以等待 ( await )。
从这个例子不难知道,多线程是提高数据的计算能力,而异步则是为了提高程序的吞吐量。
异步的硬件支持
计算机硬件需要依赖中断来请求 cpu 进行计算,但是中断需要存储上下文而且耗费性能,不能频繁中断 cpu 。当进行 io 操作时,一般会在用户态上进行缓存,
这时数据在内存上,接下来 cpu 切到系统态上,让 direct memory access (dma) 完成数据传输,这时 cpu 完全不过问 io 操作,待 dma 完成时,会将在寄存器上做标记。
异步的程序原理
异步是将程序分成几个部分,每部分由一个状态控制,最后形成一个有限状态机。
如对本文有疑问,
点击进行留言回复!!
相关文章:
-
-
-
C#实现猜数字游戏
本文实例为大家分享了c#实现猜数字游戏具体代码,供大家参考,具体内容如下给定一个0-100的随机数字猜其大小题目样式:电脑产生一个0到100之间的随机数字,并且...
[阅读全文]
-
-
C# 可空类型的具体使用
在项目中我们经常会遇到可为空类型,那么到底什么是可为空类型呢?下面我们将从4个方面为大家剖析。1、可空类型基础知识顾名思义,可空类型指的就是某个对象类型可以为空...
[阅读全文]
-
-
-
C#实现猜数字小游戏
本文实例为大家分享了c#实现猜数字小游戏的具体代码,供大家参考,具体内容如下效果如图:代码:using system;using system.collecti...
[阅读全文]
-
-
C#实现简单俄罗斯方块
最近在看《.net游戏编程入门经典 c#篇》 第一章介绍了如何制作俄罗斯方块,自己试了试按照书上的步骤,可算是完成了。于是写下这篇文章留作纪念。1.类的设计在充...
[阅读全文]
-
网友评论