关于在mvc/webapi 中 async/await 异步编程的探究和整理 你可以用双手玩转多个球

查看调试器windbg和sos.dll调试器扩展或挖掘W3SVC日志

设置minWorkerThreads来解决流量突发

总结相关论点

1.IIS执行原理和管道,IIS 在接受请求HTTP.sys ->IIS->CLR->IIS->Reponse。异步解决的是 IIS->CLR->IIS 的过程,IIS线程池 线程数量有限。

减少或降低对线程的阻塞是选择异步的重要原因

2.异步会带来线程切换的资源开销问题,而且一个CPU(核)只能处理一个线程。所以应当避免在耗费CPU的方法使用异步,这毫无收益并带来线程

切换的开销。

3.异步对网络和IO的长时间等待最为适用。如远程访问api,对本地文件资源的读取等耗时操作。并可以实现远程调用的超时取消机制。

4.数据库的访问是否适用异步操作? 这里存在争论

4.1 不适用,数据库通常就是系统瓶颈之所在。此举无非是将web的访问压力转移到数据库,而且在将数据库访问异步化之后会进一步加大数据库压力,因为web可接收的

访问变得更大了

4.2 适用,在4.1中忽略了一个系统并非所有请求都需要对数据库进行访问,但是由于部分访问数据库的请求长时间占用线程,导致站点整体响应能力变弱。数据库的事情让数据库

去解决。

HTTP.sys 内核队列 默认1000,在内存超过2G或更多的时候 可以将这个值设置到5000 以上,通过IIS 应用池高级设置 更改队列长度即可。

从IIS7开始加入MaxConcurrentRequestsPerCPU的注册表项 默认12  v4.0 开始 为5000 设置为0 请求将在IIS I/O上执行 不切换到CLR Treadpool

路径 DWORDHKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ ASP.NET \ 2.0.50727.0

如果应用程序访问WebService/WCF/通过System.Net 访问Http  可以更改System.Net.ServicePointManager.DefaultConnectionLimit 此值可以设置得非常大,默认是12*#CPU,意味着4核心的服务器可以有48个并发连接,甚至可能需要修改TcpTimedWaitDelay和MaxUserPorts注册表值

https://blogs.msdn.microsoft.com/rickandy/2009/11/14/should-my-database-calls-be-asynchronous/

.Net Mvc 异步编程的更多相关文章

  1. MVC 4 异步编程简化了

    MVC 3 异步编程好麻烦,需要使用异步控制器,一个Action需要拆成两个,很不方便.MVC3的好处是,只需要.NET Framework 4.0就能运行 MVC 4 之后只需要使用async和aw ...

  2. c#异步编程(三)—ASP.NET MVC 异步控制器及EF异步操作

    ASP.NET MVC 异步控制器及EF异步操作 异步控制器 ASP.NET MVC2后开始了对异步请求管道的支持,异步请求管道的作用是允许web服务器处理长时间运行的请求,比如 那些花费大量时间等待 ...

  3. C#与C++的发展历程第三 - C#5.0异步编程巅峰

    系列文章目录 1. C#与C++的发展历程第一 - 由C#3.0起 2. C#与C++的发展历程第二 - C#4.0再接再厉 3. C#与C++的发展历程第三 - C#5.0异步编程的巅峰 C#5.0 ...

  4. 异步编程 In .NET

    概述 在之前写的一篇关于async和await的前世今生的文章之后,大家似乎在async和await提高网站处理能力方面还有一些疑问,博客园本身也做了不少的尝试.今天我们再来回答一下这个问题,同时我们 ...

  5. 让我们再为C#异步编程Async正名

    本文版权归博客园和作者吴双本人共同所有.转载和爬虫必须在显要位置注明出处:http://www.cnblogs.com/tdws 半年前翻译了一系列很糟糕的异步编程文章,用异步的常用语来说:" ...

  6. [C#] 谈谈异步编程async await

    为什么需要异步,异步对可能起阻止作用的活动(例如,应用程序访问 Web 时)至关重要. 对 Web 资源的访问有时很慢或会延迟. 如果此类活动在同步过程中受阻,则整个应用程序必须等待. 在异步过程中, ...

  7. 异步编程 In .NET(转)

    转自:http://www.cnblogs.com/jesse2013/p/Asynchronous-Programming-In-DotNet.html 概述 在之前写的一篇关于async和awai ...

  8. 【转】异步编程 In .NET

    概述 在之前写的一篇关于async和await的前世今生的文章之后,大家似乎在async和await提高网站处理能力方面还有一些疑问,博客园本身也做了不少的尝试.今天我们再来回答一下这个问题,同时我们 ...

  9. 异步编程 In .NET(转载)

    概述 在之前写的一篇关于async和await的前世今生的文章之后,大家似乎在async和await提高网站处理能力方面还有一些疑问,博客园本身也做了不少的尝试.今天我们再来回答一下这个问题,同时我们 ...

随机推荐

  1. 《响应式Web设计实践》学习笔记

    原书: 响应式Web设计实践 目录: 第2章 流动布局 1. 布局选项 2. 字体大小 3. 网格布局 4. 混合固定宽度和流动宽度 第3章 媒介查询 1. 视口 2. 媒介查询结构 3. 内嵌样式与 ...

  2. ajax jsonp请求报错not a function的解决方案

    概述 最近工作中使用ajax,有时会报json4 is not a function的错误,有时又不会报错.找了很久,网上说是因为多次请求同一个资源导致的,但是我检查了自己的代码,对于重复资源并没有重 ...

  3. [Swift]两种线程休眠的方式

    一.线程休眠方式1 [Swift]与[C#]的比较: //C#:需要添加using System.Threading; //线程休眠3000毫秒,即3秒 Thread.Sleep(); //Swift ...

  4. 使用redis配置分布式session

    1. spring-redis-session 1.1. 配置 /** * @author laoliangliang * @date 2018/12/21 17:19 */ @Configurati ...

  5. 排除Transformation Errors

    当运行session时,会产生大量的Transformation Errors,这些Error会导致性能变慢 1 Transformation Errors导致性能降低的原因 当有大量记录有Trans ...

  6. SpringBoot整合Mybatis完整版

    喜欢的朋友可以关注下,粉丝也缺. 自从Spring推出Boot,Cloud系列之后,一度成为热门的框架,现在大部分的招聘要求都要有相关的开发经验,借此我在这里就给大家分享一下如何玩转SpringBoo ...

  7. 使用JDOM解析xml文档

    一.使用JDOOM解析xml文档 准备工作 1.下载JDOM.jar 包 解析代码如下 import org.jdom2.Attribute; import org.jdom2.Document; i ...

  8. kindeditor扩展粘贴截图功能&修改图片上传路径并通过webapi上传图片到图片服务器

    前言 kindeditor是一个非常好用的富文本编辑器,它的简单使用我就不再介绍了. 而kindeditor却对图片的处理不够理想. 本篇博文需要解决的问题有两个: kindeditor扩展粘贴图片功 ...

  9. 【翻译】JavaScript内存泄露

    原文地址:http://javascript.info/tutorial/memory-leaks#tools 我们在进行JavaScript开发时,很少会考虑内存的管理.JavaScript中变量的 ...

  10. php5.5+apache2.4+mysql5.7在windows下的配置

    apache2.4下载和安装 下载apache2.4 https://www.apachelounge.com/download/VC11/ 提取解压目录Apache24到d:/dev/Apache2 ...