c# – 什么时候真的需要在Web框架上异步?

Async已经成为.net和MS中的一个流行语,并将其引入到Web API 2中,以便在其他人等待IO完成时可以处理更多的请求.

虽然我可以看到这个的好处,真的是一个问题吗? X64架构在线程池中有30000个线程,除非您的网站上有许多并发用户是异步真正需要的?即使你有这么多并发用户没有缓存,我相当肯定sql Server将会崩溃与许多请求?

除了真正需要在Web框架上进行异步路由外,它还是有光泽的吗?

解决方法

这里的许多其他答案来自UI(桌面/移动应用)的角度,而不是Web服务器的观点.

Async has become a buzzword in .net and MS have introduced it in Web API 2 so that more requests can be handled whilst others are waiting on IO to finish.

在.NET 4.5 / VS 2012中引入了异步和等待.然而,ASP.NET自.NET 2.0以来已经有异步请求功能 – 很久以前.人们一直在使用它.

什么异步和等待带给表是易于维护的异步代码.

Whilst I can see the benefit of this,is it really a concern?

服务器异步的主要优点是可扩展性.简单地说,异步任务比线程更好.

@约书亚的评论是记忆的关键;一个线程需要大量的内存(不要忘记无法分页的内核模式堆栈),而异步请求字面上只需要几百个字节.

还有爆发的考虑. .NET线程池具有有限的注入速率,因此除非您将minWorkerThread计数设置为远高于通常需要的值,否则当您获得一个流量时,一些请求将在503之前发生,而.NET可以启动足够的线程来处理它们.异步使您的线程免费(尽可能多),以便更好地处理突发流量.

A x64 architecture has 30000+ threads in the Thread Pool so unless you have that many concurrent users on your website is async really required?

@Joshua再次正确地指出,您可能会想到一个请求队列限制(IIS队列认为1000,ASP.NET请求限制为5000).重要的是要注意,一旦这个队列被填满(在突发流量期间),新的请求将被拒绝503.

Even if you have that many concurrent users without caching I’m pretty sure sql Server will fall over with that many requests?

啊,现在完全是另一个问题.

我正在给异步服务器一个talk at ThatConference 2013.这个谈话的一部分是异步无助的情况(my Twitter update).

一个excellent blog post here采取的立场,异步db调用是不值得的努力.注意这篇文章中的假设很重要:

>在撰写这篇文章的时候,异步Web服务器很难.这些天我们有异步,​​越来越多的图书馆正在提供异步API(例如,实体框架).
>该体系结构假定单个Web服务器具有单个sql Server后端.这是传统上非常普遍的设置,但是今天很快就会改变.

当异步服务器真正发光的时候,当你的后端也可以扩展.例如,一个Web服务,Azure sql,Nosql集群等.例如:我正在编写一个使用Azure sql和Storage作为其后端的MVC / WebAPI服务器(对于所有实际的目的,我可以像他们具有无限的可扩展性);在这种情况下,我将使我的服务器异步.在这种情况下,您可以使用异步方式将服务器扩展到10x或更大.

但是,如果您只有一个sql Server后端(并且没有计划更改为Azure sql),那么无论如何,由于您的后端受到限制,因此无法使您的Web服务器异步.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


原文地址:http://msdn.microsoft.com/en-us/magazine/cc163791.aspx 原文发布日期: 9/19/2005 原文已经被 Microsoft 删除了,收集过程中发现很多文章图都不全,那是因为原文的图都不全,所以特收集完整全文。 目录 前言 CLR启动程序
前言 随着近些年微服务的流行,有越来越多的开发者和团队所采纳和使用,它的确提供了很多的优势也解决了很多的问题,但是我们也知道也并不是银弹,提供优势的同时它也给我们的开发人员和团队也带来了很多的挑战。 为了迎接或者采用这些新技术,开发团队需要更加注重一些流程或工具的使用,这样才能更好的适应这些新技术所
最近因为比较忙,好久没有写博客了,这篇主要给大家分享一下PLINQ中的分区。上一篇介绍了并行编程,这边详细介绍一下并行编程中的分区和自定义分区。 先做个假设,假设我们有一个200Mb的文本文件需要读取,怎么样才能做到最优的速度呢?对,很显然就是拆分,把文本文件拆分成很多个小文件,充分利用我们计算机中
在多核CPU在今天和不久的将来,计算机将拥有更多的内核,Microsoft为了利用这个硬件特性,于是在Visual Studio 2010 和 .NET Framework 4的发布及以上版本中,添加了并行编程这个新特性,我想它以后势必会改变我们的开发方式。 在以前或者说现在,我们在并行开发的时候可
c语言输入成绩怎么判断等级
字符型数据在内存中的存储形式是什么
c语言怎么求字符串的长度并输出
c语言函数的三种调用方式是什么
c语言中保留两位小数怎么表示
double的输入格式符是什么
长整型输出格式是什么
C语言中文件包含的命令关键字是什么
c程序如何编写x的y次方
c语言开根号代码是什么
c语言怎么进行字符串比较
c语言怎么进行强制类型转换
c语言运算符的优先级顺序是什么
c++用什么软件编程
中序遍历是怎么遍历的
h文件和c文件的关系是什么