关于在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. 关于Python打开IDLE出现错误的解决办法

    安装好python,打开IDLE出现以下错误: 解决办法: 修改[Python目录]\Lib\idlelib\PyShell.py文件,在1300行附近,将def main():函数下面use_sub ...

  2. 第40节:Java中的IO知识案例

    流是一连流串的字符,是信息的通道,分输出流和输入流. IO的分类 第一种分:输入流和输出流. 第二种分:字节流和字符流. 第三种分:节点流和处理流. Java中流的分类: 流的运动方向,可分为输入流和 ...

  3. Python开发网站目录扫描器

    有人问为什么要去扫描网站目录:懂的人自然懂 这个Python脚本的特点: 1.基本完善 2.界面美观(只是画了个图案) 3.可选参数增加了线程数 4.User Agent细节处理 5.多线程显示进度 ...

  4. [Swift]Alamofire:设置网络请求超时时间【timeout】的两种方式

    两种方式作用相同,是同一套代码的两种表述. 第一种方式:集聚. 直接设置成员属性(全局属性),这种方法不能灵活修改网络请求超时时间timeout. 声明为成员属性: // MARK: - 设置为全局变 ...

  5. HOG算法资源备忘

    最近再研究这个算法,找了不少资料来研究,发现这方面的资料好的并不多,今天就把找到的经典的资料做一个汇总,方便后续查阅吧. 一 基本概念和推导: 1 解释最清楚的:中文网站:https://blog.c ...

  6. 性能瓶颈之Mapping

    如果Source和Target都不存在性能上的瓶颈,则问题可能会出在Mapping 如何判定Mapping存在性能瓶颈 1)  在session log中读取thread statistics和wor ...

  7. 一文总结 Linux 虚拟网络设备 eth, tap/tun, veth-pair

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复「1024」即可领取,欢迎大家关注,二维码文末可以扫. Linux 虚 ...

  8. Kubernetes集群搭建之Master配置篇

    本次系列使用的所需部署包版本都使用的目前最新的或最新稳定版,安装包地址请到公众号内回复[K8s实战]获取 今天终于到正题了~~ 生成kubernets证书与私钥 1. 制作kubernetes ca证 ...

  9. Abp + gRpc 如何实现用户会话状态传递

    0.背景 在实际项目当中,我们采用的是 Abp 框架,但是 Abp 框架官方并没有针对 Grpc 进行模块封装.基于此我结合 Abp 与 MagicOnion 封装了一个 Abp.Grpc 模块,它包 ...

  10. Android--UI之TextView

    前言 开门见山,这一篇博客主要讲一下在Android开发中,UI控件TextView的一些使用方式,并且通过四个例子实现一般项目中需要的效果来讲解TextView的使用.并且在之后的一段时间之内,都会 ...