• .Net Mvc 异步编程


    关于在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/

  • 相关阅读:
    解决不同浏览器文件下载文件名乱码问题(Java)
    zabbix常见问题
    axiosapi,js结构化定义、调用业务api接口。 no
    Java基础:反射小结
    Java基础:函数式编程的函数的本质
    Java基础:Java方法的签名的定义
    Java基础:异常怎么分类的(面试题:Exception和Error的区别),看完这篇就都捋清了
    编程类型和代表性语言
    Java基础:构造器小结
    ubuntu搭建wifi热点,共享网络,超简单
  • 原文地址:https://www.cnblogs.com/bninp/p/10729239.html
Copyright © 2020-2023  润新知