关于在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. pip 安装模块时出现error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools":

    在使用pip安装mysqlclient模块时,出现如下错误: 在网上查找资料后显示可能是由于不兼容导致的,最好去下载.whl文件安装成功. 资源地址:http://www.lfd.uci.edu/~g ...

  2. 【渗透攻防WEB篇】SQL注入攻击初级

    前言不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一,这里我想问 ...

  3. 微服务中Feign快速搭建

    在微服务架构搭建声明性REST客户端[feign].Feign是一个声明式的Web服务客户端.这使得Web服务客户端的写入更加方便 要使用Feign创建一个界面并对其进行注释.它具有可插入注释支持,包 ...

  4. FFmpeg开发实战(一):FFmpeg 打印日志

    在Visual Studio 开发(二):VS 2017配置FFmpeg开发环境一文中,我们配置好了FFmpeg的开发环境,下面我们开始边实战,边学习FFmpeg. 首先,我们要学习的就是FFmpeg ...

  5. centos7换源

    cd /etc/yum.repos.d/ #打开源目录 mv /CentOS-Base.repo /CentOS-Base.repo.bak #备份原来的源wget -O /etc/yum.repos ...

  6. 双十一福利,阿里云1核2G一年最低只要99

    活动期间,新用户可任选1款购买,限购1台,拼团后团内每增加1名新购用户,全团再享10%优惠 (50%封顶),买贵返差 又是只给新用户的福利,比上次的699一年的活动要差一点.如果之前注册了没下手的用户 ...

  7. 生成uuid唯一标识符

    generate_uuid: function(){ var d = new Date().getTime(); if(window.performance && typeof win ...

  8. 抓包工具 Fiddler 使用介绍

    简介 Fiddler是一个抓包工具,可以将网络传输发送与接收的数据包进行截获.重发.编辑等操作.也可以用来检测流量.原理是以web代理服务器的形式进行工作的,使用的代理地址是:127.0.0.1,端口 ...

  9. 使用 Docker 部署 Grafana + Prometheus 监控 MySQL 数据库

    一.背景 在平时开发过程当中需要针对 MySQL 数据库进行监控,这里我们可以使用 Grafana 和 Prometheus 来实现监控功能.Grafana 是一款功能强大的仪表盘面板,支持多种数据源 ...

  10. struts2框架(1)---struts2入门

    struts2框架 如果你之前在MVC模式的时候一直都是通过servlet,获取和返回数据,那么现在开始学习struts2框架, Struts是一个实现MVC设计模式的优秀的框架.它的许多优点我就不说 ...