Asp.Net 为什么需要异步
之前看过别人提出为什么在本是多线程的Asp.Net下需要异步环境的时候,提出在Asp.Net环境下本身就是多线程,每个请求就是由一个专门IIS线程负责(咱不说Core下无IIS的情况)。所以以此推论Asp.Net下的异步是没有任何意义的,且由于异步的线程上下文保存和上下文切换的原因只会损害性能,百害而无一利。
然后我表示难道你不知道IIS线程是宝贵的线程,而异步线程则是线程池廉价线程,异步提升的是吞吐量而不是响应速度等云云。。。
在此不是要来撕逼,而是以此作为抛砖引玉,翻译一下 Async In C#5第二章节里Web Application Server Code章节里相关内容以此论证在Web里异步是有意义的:
Asp.Net网站服务器没有类似UI线程这样的单线程限制(上一章节里所讨论UI线程的异步).但是在Web里使用异步仍然是有好处的,长时(Long-Running),操作特别是数据库查询,这在Web应用程序里是非常常见的操作
根据IIS的版本不同,Web站点将会有请求处理线程的限制(IIS线程),这将影响正在处理的并发请求数量的总数.如果你的请求需要耗费大量时间等待数据库查询,那么你或许需要增加你的服务器以便处理更多并发而来的请求.
当一个线程被阻塞的时候,它没有使用任何Cpu资源,但你不能假设这个线程没有占用任何服务器资源.实际上阻塞的线程可能会导致两个重大的瓶颈
①内存:
每一个托管线程都需要保留大概1M大小的虚拟内存.这在只有十几条线程的时候不是什么问题.但如果在使用上百条线程的时候这很容易失控.如果内存经常在交换(指内存条里的内存数据交换到硬盘里的虚拟内存文件),在该线程恢复(Resuming)运行的时候将会变得相当慢.
②调度:
操作系统的调度器负责决定哪条线程在什么时间可以被Cpi执行.无论该线程是否被阻塞,调度器都必须要考虑每条线程的情况,去确认它什么时候会变成不阻塞的状态.这个上下文的切换(指各个线程之前来回切换确认状态)是一个缓慢的操作,这将会拖慢整个系统.
上述的问题将直接体现在服务器的延迟增加和吞吐量的下降.
异步代码的主要特征在于,线程启动一个长时(Long-Running)操作后就被释放了然后去做其他事情(比如去处理其他用户的请求).具体到Asp.Net里,线程来源于线程池, 所以它(那条线程)将在那个长时(Long-Running)操作执行期间返回到线程池里去处理其它的请求.所以可以用更少的线程来处理更多的请求.
个人总结:
异步提升的不是性能或者响应时间,而是吞吐量
异步代码理论上应该是比同步代码慢(由于异步作了并行的另当别论),但是能提升服务器的吞吐量我觉得这个是值得的.
另外个人推荐大部分Http请求和可以预测的较慢的Sql请求都应该走异步,这些是我个人认为比较"慢"且比较能体现出异步的意义的使用环节
Asp.Net 为什么需要异步的更多相关文章
- ASP模拟POST请求异步提交数据的方法
这篇文章主要介绍了ASP模拟POST请求异步提交数据的方法,本文使用MSXML2.SERVERXMLHTTP.3.0实现POST请求,需要的朋友可以参考下 有时需要获取远程网站的某些信息,而服务器又限 ...
- ASP.NET之自定义异步HTTP处理程序(图文教程)
前面我们学习了关于关于自定义同步HTTP处理程序,相信大家可能感觉有所成就,但是这种同步的机制只能对付客户访问较少的情况或者数据处理量不大的情况,而今天这篇文章就是解决同步HTTP处理程序的这个致命缺 ...
- Asp.net+jquery+ajaxpro异步仿Facebook纵向时间轴效果
Asp.net+jquery+ajaxpro异步仿Facebook纵向时间轴效果 在一个项目中,用到了时间轴展示产品的开发进度,为了更好用户体验,想到了Facebook的timeline效果, 搜了一 ...
- ASP.NET WebForm中异步请求防止XSRF攻击的方法
在ASP.NET MVC中微软已经提供了如何防止跨域攻击的方法.对于传统Webfrom中使用Handler来接受ajax的Post请求数据,如何来防止XSRF攻击呢.这里给大家提供一个简单地方法,和M ...
- 看stackoverflow大牛如何回答何时在ASP.NET中使用异步控制器?
转载自博客园:http://farb.cnblogs.com/ 今天无意中看到stackoverflow上一个很好的问答,个人觉得很有价值,所以翻译过来和大家共享!希望大家能相互交流. 在ASP.NE ...
- ASP.NET MVC 4 异步加载控制器
ASP.NET 4 Developer preview中的异步操纵器 在放弃了对.NET 3的支持之后, ASP.NET MVC 4 彻底拥抱了Task类库, 你不需求再蛋疼的给每个Action写两个 ...
- ASP.NET 2.0 异步页面原理浅析 [1]
与 ASP.NET 1.0 相比,ASP.NET 2.0 的各方面改进可以说是非常巨大的.但就其实现层面来说,最大的增强莫过于提供了对异步页面的支持.通过此机制,编写良好的页面可以将数据库.WebSe ...
- ASP.NET线程与异步
什么是线程? 线程简单来说就是一种数据结构,用来管理这个程序的执行状态,其中包括 1.线程核心对象->寄存器的状态 2.线程环境块,是一块用户模式下的内存,包含线程的异常处理链的头部.线程的局部 ...
- ASP.NET MVC 文件异步上传问题处理
最近在做一个网站,用asp.net MVC4.0来开发,今天遇到了个小问题,通过查找相关渠道解决了,在这里把这个问题写出来,问题非常简单,不喜勿喷,mark之希望可以给遇到相同问题的初学者一点帮助.我 ...
随机推荐
- 支持向量机(Support Vector Machine)-----SVM之SMO算法(转)
此文转自两篇博文 有修改 序列最小优化算法(英语:Sequential minimal optimization, SMO)是一种用于解决支持向量机训练过程中所产生优化问题的算法.SMO由微软研究院的 ...
- SVN初体验
呐,部门领导要求今后项目部分内容要实行版本控制,因此有机会深入接触下SVN这门功课 ---------------------------------------------------------- ...
- js基于谷歌地图API绘制可编辑圆形与多边形
之前的工作中需要在谷歌地图上绘制可编辑多边形区域,所以基于谷歌地图API封装了个html页面,通过调用js绘制多边形并返回各点的经纬度坐标:当然首先你要保证你的电脑可以打开谷歌地图... 新建一个ht ...
- ubuntu远程桌面介绍
一.windows远程ubuntu14.04 由于xrdp.gnome和unity之间的兼容性问题,在Ubuntu 14.04版本中仍然无法使用xrdp登陆gnome或unity的远程桌面,现象是登录 ...
- zoj3961(区间问题)
点击打开zoj1961Let's Chat Time Limit: 1 Second Memory Limit:65536 KB ACM (ACMers' Chatting Messenge ...
- Jmeter测试HTTPS接口
(以支付宝网站为例:https://memberprod.alipay.com/account/reg/index.htm) 浏览器:chrome 一.网页上导出证书 1.点击浏览器小锁--" ...
- java自动化测试-http请求get
首先我10.1过来自己玩通了讨鬼转极,看了电视剧白夜追凶,换了工作小组,这段时间确实比较少的更新博客,确实有点不勤奋,我先自我检讨 我就不赘述java的安装了,这个是比较简单的,有必要的话以后在讲 对 ...
- scala PartialFunction
1.orElse和andThen的区别 源码如下,区别很明显,orElse是并列的关系,而andThen是调用者的结果作为k的输入. trait PartialFunction[-A, +B] ext ...
- JavaScript中的面向对象程序设计
本文内容目录顺序: 1.Object概念讲述: 2.面向对象程序设计特点: 3.JavaScript中类和实例对象的创建: 4.原型概念: 5.原型API: 6.原型对象的具体使用:7.深入理解使用原 ...
- Locust性能测试框架,从入门到精通
1. Locust简介 Locust是使用Python语言编写实现的开源性能测试工具,简洁.轻量.高效,并发机制基于gevent协程,可以实现单机模拟生成较高的并发压力. 主要特点如下: 使用普通的P ...