社区
C#
帖子详情
关于异步的问题!
bios8086
2011-08-15 06:31:02
这个概念还是有点模糊,书上说对于密集的I/O操作 异步的效率比同步要高很多,比如下载网页,使用异步操作好在哪里呢?
异步的httpwebrequest不是仍然需要等待吗?"一个常见的做法就是执行一系列的I/O密集操作,同时对其结果进行操作" 这是
《Effective C#》里的一句话,我就是不是很明白,结果还在异步执行呢,怎就就对其结果进行操作了?
...全文
389
21
打赏
收藏
关于异步的问题!
这个概念还是有点模糊,书上说对于密集的I/O操作 异步的效率比同步要高很多,比如下载网页,使用异步操作好在哪里呢? 异步的httpwebrequest不是仍然需要等待吗?"一个常见的做法就是执行一系列的I/O密集操作,同时对其结果进行操作" 这是 《Effective C#》里的一句话,我就是不是很明白,结果还在异步执行呢,怎就就对其结果进行操作了?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
LeeHGMaster
2012-12-24
打赏
举报
回复
复于: 2011-08-16 17:25:00 假设一个足球场,10个人提水从一端到另一端,第一种方式是没人提一桶水走过去,第二种方式是十个人等分的站成一线,一桶一桶传递过去,问哪种方式快? 且算着呢吧,告诉你是第二种方式快,因为第一种方式10个人把水送过去后,都要走回来,这段时间是不做功的,而逐个传送的方式每个人走的距离只有第一种的十分之一,而且“传送带”上可以同时传递多桶水。回过头在想想异步模式,是不是有些类似呢?
showjim
2011-08-17
打赏
举报
回复
[Quote=引用 19 楼 etudiant6666 的回复:]
异步模式的绝大部分应用都属于“流水线”形式。
[/Quote]
顶楼上,从本质上说,异步的目标就是流水线。
窗户纸
2011-08-17
打赏
举报
回复
异步模式的绝大部分应用都属于“流水线”形式。
窗户纸
2011-08-17
打赏
举报
回复
再从水桶角度说几句,如果我们把水桶理解为线程,如果我们只有10个水桶,那么都传出去后,第一个人手里没有水桶了就会空闲(线程池空了),因此异步模式要求对线程的获取有支配权,保证他可以不断拿到新水桶,以不至于因为水桶没有而停工。
那么,如果这是个人中有个人动作很慢,结果会怎么样呢,他的面前会堆积很多水桶,这对应程序就是很多线程被阻塞到他那里了,解决的方法就是在他那安个水槽(队列),传过来时将水倒入水槽中就可以了。因此异步模式往往要和队列紧密联系,不然反而会造成线程资源的大幅占用。很多服务器端没有注意这一点,就造成了未知的系统很慢的问题。
窗户纸
2011-08-17
打赏
举报
回复
再往多说两句,假设对于第二种(传水桶)的方式,要求收到空桶后才能回去领水,那会是什么效果,很明显,这是个人排队干的事只有第一种的十分之一的效率。和人家一次传一桶的效率相同,很多牛x的架构师设计的异步模式就是这种“伪异步”,每次发出异步请求后等到回调才开始下一次操作。其节省的只不过是线程资源而已,并没有起到提高效率的目的,
高效的异步可以起到比10个水桶(并发模式)一起出发更高的效率,而不是更低。这就要求传水桶的人传到目的地后要马上放下水桶开始新的传水桶作业。
IE11下面经常卡到爆
2011-08-16
打赏
举报
回复
顶LS的几位,异步线程是相对应用程序主线程(通常是UI线程)来说的,回调函数(委托)会在异步线程完成下载时主动给主线程发送一个消息,而不是让主线程一直阻塞,等待下载完成后再继续往下执行,有效地避免应用程序假死,并提高了效率(并发执行了多件事件)
窗户纸
2011-08-16
打赏
举报
回复
为什么并行总线要被串行总线替代,就是一样的比喻
窗户纸
2011-08-16
打赏
举报
回复
我的例子实际上是并发与串行的例子,但解决的问题是一样的,10个人周而复始的担水,诸位可以实际试试哪种快,其关键点余异步模式相同的是“减少CPU空闲的时间”,1-个人都从球场一端走回到另一端,期间就造成了10个人都是空闲的,而传递的方式时,每人异步的操作,空闲时间只有其1/10
ycproc
2011-08-16
打赏
举报
回复
Linux® 中最常用的输入/输出(I/O)模型是同步 I/O。在这个模型中,当请求发出之后,应用程序就会阻塞,直到请求满足为止。这是很好的一种解决方案,因为调用应用程序在等待 I/O 请求完成时不需要使用任何中央处理单元(CPU)。但是在某些情况中,I/O 请求可能需要与其他进程产生交叠
以专业开发人员为伍
2011-08-16
打赏
举报
回复
再说一下为什么CPU利用率很低?因为大量时间都花在
等待底层各种设备的响应
上了!
这就是需要异步编程的原因。特别是现在的CPU多核心的越来越多,速度已经达到极限的情况下就是通过提高并发率来提高整个系统执行速度。异步编程会成为以后一个非常基本的编程知识,否则你的程序可能根本禁不起随便的code review就淘汰了。
以专业开发人员为伍
2011-08-16
打赏
举报
回复
“十个人提水”一趟就搞定了,还“走回来”干什么?
以专业开发人员为伍
2011-08-16
打赏
举报
回复
什么乱七八糟的。
唉,并发是为了什么?为了把CPU利用率提高。
比如下载时你的CPU可能有那么几秒钟只有2%,如果你有一大批文件需要下载,那么就是多个连续的2%,因为它们是顺序执行的。
而并发时你就能能把CPU利用率提高到40%,虽然单个下载慢了,但是整个速度快了,因为它们是并发执行的。
bios8086
2011-08-16
打赏
举报
回复
[Quote=引用 6 楼 skyparty 的回复:]
引用 4 楼 etudiant6666 的回复:
假设一个足球场,10个人提水从一端到另一端,第一种方式是没人提一桶水走过去,第二种方式是十个人等分的站成一线,一桶一桶传递过去,问哪种方式快?
且算着呢吧,告诉你是第二种方式快,因为第一种方式10个人把水送过去后,都要走回来,这段时间是不做功的,而逐个传送的方式每个人走的距离只有第一种的十分之一,而且“传送带”上可以同时传递多桶水。回过头……
[/Quote]
恩 较接近事实了!
nicholesvb
2011-08-16
打赏
举报
回复
强大 如题
hui_play
2011-08-16
打赏
举报
回复
似懂非懂
小赖赖
2011-08-16
打赏
举报
回复
[Quote=引用 4 楼 etudiant6666 的回复:]
假设一个足球场,10个人提水从一端到另一端,第一种方式是没人提一桶水走过去,第二种方式是十个人等分的站成一线,一桶一桶传递过去,问哪种方式快?
且算着呢吧,告诉你是第二种方式快,因为第一种方式10个人把水送过去后,都要走回来,这段时间是不做功的,而逐个传送的方式每个人走的距离只有第一种的十分之一,而且“传送带”上可以同时传递多桶水。回过头在想想异步模式,是不是有些类似呢?
[/Quote]
这个是一样快吧
第二种方式也要走回来
第一种方式一次送10桶,第二种方式一次一桶,走的距离当然是十分之一了
这例子不恰当啊....
异步其实是一种统筹安排,
比如做饭的时候,有2种方式
一种是把菜全部准备好,然后煮菜
一种是准备一份菜,煮一份,煮的时候可以不用管,再去准备下一份菜
假设准备一份菜的时间是1,煮菜的时间是2
做10份菜用第一种方式需要30单位的时间
第二种方式只需要21单位的时间
bios8086
2011-08-16
打赏
举报
回复
[Quote=引用 4 楼 etudiant6666 的回复:]
假设一个足球场,10个人提水从一端到另一端,第一种方式是没人提一桶水走过去,第二种方式是十个人等分的站成一线,一桶一桶传递过去,问哪种方式快?
且算着呢吧,告诉你是第二种方式快,因为第一种方式10个人把水送过去后,都要走回来,这段时间是不做功的,而逐个传送的方式每个人走的距离只有第一种的十分之一,而且“传送带”上可以同时传递多桶水。回过头在想想异步模式,是不是有些类似呢?
[/Quote]
豁然开朗
窗户纸
2011-08-16
打赏
举报
回复
假设一个足球场,10个人提水从一端到另一端,第一种方式是没人提一桶水走过去,第二种方式是十个人等分的站成一线,一桶一桶传递过去,问哪种方式快?
且算着呢吧,告诉你是第二种方式快,因为第一种方式10个人把水送过去后,都要走回来,这段时间是不做功的,而逐个传送的方式每个人走的距离只有第一种的十分之一,而且“传送带”上可以同时传递多桶水。回过头在想想异步模式,是不是有些类似呢?
bios8086
2011-08-16
打赏
举报
回复
顶起!
bios8086
2011-08-15
打赏
举报
回复
莫非是书的作者把这个夸大了?我真的想不出异步好在哪里,其实也就是新增了个线程,负责下载啊
加载更多回复(1)
android中ListView
异步
加载图片时的图片错位
问题
解决方案
android中ListView
异步
加载图片时的图片错位
问题
解决方案
15.tornado中使用
异步
实现爬取图片功能(tornado官方推荐使用协程写
异步
代码!)
15.tornado中使用
异步
(tornado官方推荐使用协程写
异步
代码!)
第14章
异步
断言!!!
图14.1
异步
断言-
问题
陈述 到目前为止,在本书中,我们总是使用同步时钟边作为断言的采样边沿。这是有原因的。这里介绍的例子使用
异步
边缘(完全合法)作为采样边缘。
问题
陈述就会变成''每当(即
异步
)L2TxData == L2ErrorData, L2Abort被断言'。现在看起来非常合乎逻辑...
欢迎来到
异步
社区!
异步
社区的来历
异步
社区(www.epubit.com.cn)是人民邮电出版社旗下IT专业图书旗舰社区,于2015年8月上线运营。
异步
社区依托于人民邮电出版社20余年的IT专业优质出版资源和编辑策划团队,打造传统出版与电子出版和自出版结合、纸质书与电子书结合、传统印刷与POD按需印刷结合的出版平台,提供最新技术资讯,为作者和读者打造交流互动的平台。社区里都有什么?购买图书我们出版的图书涵盖主流I...
(精华)2020年10月7日 高并发高可用
异步
架构
同步架构与
异步
架构 背景 把智能系统比喻成KFC营业厅,处理器是窗口和窗口后面的服务员(把一个窗口当作一个核心),指令集是后面排队的人,窗口是数据吞吐量。 当中午就餐人多的时候,一个窗口肯定忙不过来, 这时候就需要增加窗口 解决方案 1.在窗口后面增加多个服务员,分担一下工作 2.新增多个窗口 分析 方案一就是
异步
架构,方案二同步架构 一个窗口是不可能比上多个窗口的工作效率 对比结论 优点:
异步
架构设计简单,实现方便。 缺点:性能低,吞吐量差。 总结:如果对处理并发量不高的系统。优先选择
异步
架构!!!
异步
C#
110,536
社区成员
642,578
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章