是否所有Web请求都是并行执行的并且是异步处理的?

Ami*_*nja 6 c# asp.net multithreading asynchronous asp.net-web-api

我正在使用由IIS托管的WebApi服务控制器,我正在尝试理解这种架构是如何工作的:

  1. 当WebPage客户端同时发送异步请求时,所有这些请求是否都在WebApi控制器上并行执行?

  2. 在IIS应用程序池中,我注意到队列大小设置为1,000默认值 - 这是否意味着在WebApi服务器上同时可以并行处理1,000个最大线程?或者这个值只与IIS队列有关?

  3. 我已经读过IIS维护某种线程队列,这个队列是异步发送它的工作吗?或者IIS发送给WebApi服务的所有客户端请求是否同步发送?

Ant*_*t P 3

您正在查看的队列大小指定每个应用程序池(通常映射到一个 w3wp 工作进程)排队的最大请求数。一旦超过队列长度,就会返回503“Server Too Busy”错误。

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

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

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