首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否所有web请求都并行执行并异步处理?

问是否所有web请求都并行执行并异步处理?
EN

Stack Overflow用户
提问于 2014-05-24 13:37:22
回答 2查看 10.4K关注 0票数 6

我使用的是一个由IIS托管的WebApi服务控制器,我试图了解这个体系结构到底是如何工作的:

  1. 当WebPage客户端同时发送异步请求时,所有这些请求是否都在WebApi控制器中并行执行?
  2. 在IIS应用程序池中,我注意到队列大小设置为1,000个默认值--这是否意味着1000个最大线程可以同时在WebApi服务器上并行工作?还是此值仅与IIS队列相关?
  3. 我读过IIS维护某种线程队列,这个队列是异步发送它的工作吗?还是IIS向WebApi服务发送的所有客户端请求都是同步发送的?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-24 14:02:30

您正在查看的队列大小指定了每个应用程序池(通常映射到一个w3wp工作进程)排队的最大请求数。一旦超过队列长度,503个“服务器太忙”错误将被返回。

在每个工作进程中,可以/将运行许多线程。每个请求运行在工作进程中的一个线程上(我相信,默认情况下每个进程最多有250个线程)。

因此,从本质上说,每个请求都是在自己的线程上处理的(至少是并发的,就像线程获得的一样),但是特定应用程序池的所有线程(通常)都由单个进程管理。这意味着,就请求本身而言,请求实际上是异步执行的。

响应您的评论;如果您启用了会话(您可能会这样做),那么ASP.NET将对请求进行排队,以便为每个请求维护会话的锁。试着在Chrome中点击你的睡眠动作,然后在Firefox中快速反应,看看会发生什么。您应该看到,这两个不同的会话允许并发执行请求。

票数 3
EN

Stack Overflow用户

发布于 2014-05-24 13:55:41

是的,所有请求都将使用CLR线程池中的线程并行执行,但要受限制。关于针对应用程序池设置的队列大小,此限制是IIS开始以503 - Service不可用状态代码拒绝请求。甚至在此之前,您的请求将由IIS/ASP.NET排队,这是因为不能随意创建线程。可以运行的并发请求的数量有限,这是由MaxConcurrentRequestsPerCPU和其他几个参数设置的。对于真正意义上并行执行的1000个线程,您将需要1000个CPU核心。否则,线程将需要时间切片,这将增加系统的开销。因此,线程的数量是有限制的。我相信很难通过一个单一的答案来全面回答你们的问题。您可能需要阅读一点,http://blogs.msdn.com/b/tmarq/archive/2007/07/21/asp-net-thread-usage-on-iis-7-0-and-6-0.aspx是一个很好的起点。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23845639

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档