c# – 什么时候真的需要在Web框架上异步?
Async已经成为.net和MS中的一个流行语,并将其引入到Web API 2中,以便在其他人等待IO完成时可以处理更多的请求.
虽然我可以看到这个的好处,真的是一个问题吗? X64架构在线程池中有30000个线程,除非您的网站上有许多并发用户是异步真正需要的?即使你有这么多并发用户没有缓存,我相当肯定SQL Server将会崩溃与许多请求? 除了真正需要在Web框架上进行异步路由外,它还是有光泽的吗? 解决方法
这里的许多其他答案来自UI(桌面/移动应用)的角度,而不是Web服务器的观点.
在.NET 4.5 / VS 2012中引入了异步和等待.然而,ASP.NET自.NET 2.0以来已经有异步请求功能 – 很久以前.人们一直在使用它. 什么异步和等待带给表是易于维护的异步代码.
服务器异步的主要优点是可扩展性.简单地说,异步任务比线程更好. @约书亚的评论是记忆的关键;一个线程需要大量的内存(不要忘记无法分页的内核模式堆栈),而异步请求字面上只需要几百个字节. 还有爆发的考虑. .NET线程池具有有限的注入速率,因此除非您将minWorkerThread计数设置为远高于通常需要的值,否则当您获得一个流量时,一些请求将在503之前发生,而.NET可以启动足够的线程来处理它们.异步使您的线程免费(尽可能多),以便更好地处理突发流量.
@Joshua再次正确地指出,您可能会想到一个请求队列限制(IIS队列默认为1000,ASP.NET请求限制为5000).重要的是要注意,一旦这个队列被填满(在突发流量期间),新的请求将被拒绝503.
啊,现在完全是另一个问题. 我正在给异步服务器一个talk at ThatConference 2013.这个谈话的一部分是异步无助的情况(my Twitter update). 有一个excellent blog post here采取的立场,异步db调用是不值得的努力.注意这篇文章中的假设很重要: >在撰写这篇文章的时候,异步Web服务器很难.这些天我们有异步,??越来越多的图书馆正在提供异步API(例如,实体框架). 当异步服务器真正发光的时候,当你的后端也可以扩展.例如,一个Web服务,Azure SQL,NoSQL集群等.例如:我正在编写一个使用Azure SQL和Storage作为其后端的MVC / WebAPI服务器(对于所有实际的目的,我可以像他们具有无限的可扩展性);在这种情况下,我将使我的服务器异步.在这种情况下,您可以使用异步方式将服务器扩展到10x或更大. 但是,如果您只有一个SQL Server后端(并且没有计划更改为Azure SQL),那么无论如何,由于您的后端受到限制,因此无法使您的Web服务器异步. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |