在 IIS7.5 环境中,我已将 aspnet.config 配置为将 MaxConcurrentRequestsPerCPU 设置为 1。
我正在这个 IIS 实例上执行一个 Web 服务,我已为其配置公开 MaxConcurrentRequestsPerCPU 和 MaxConcurrentThreadsPerCPU 以响应 ASMX Web 服务中的 WebMethod,这允许我通过 Web 服务确认 .NET 框架正在正确读取这些值,因此它们应该被 IIS 正确使用,只需让 WebMethod 从 HostingEnvironment 对象返回值。
我还有一个 WebMethod,它简单地让线程休眠 5 秒,简称为 TestMethod。
理论上,我相信这个设置应该确保对 TestMethod 的后续调用以串行方式发生,因为每个 CPU 只允许 1 个请求,或者,如果每个 CPU 实际上允许四核系统上的每个核心,则最多4 个请求被并行处理,具体取决于它是真正是每个 CPU 还是每个内核。
然而,这两种情况似乎都不是。对于此方法的 20 个同时请求,我希望看到大约 100 秒(20 个请求 x 5 秒)或 25 秒((20 个请求/4 个核心)x 5 秒)的完成时间。相反,我始终以 10 秒的完成时间结束,这意味着尽管并发请求限制设置为 1,但并行处理了 10 个请求。当我还将每个 CPU 的并发线程也设置为 1 时,这仍然是正确的。
谁能解释为什么这些设置似乎被忽略了,或者在这种情况下似乎无法正常工作?