4

IIS7.5 64bit 可以同时处理每个逻辑 cpu 多少个线程?我听说每个逻辑 cpu 有 12 个 IIS 处理线程,但我也听说每个逻辑 cpu 有 100 个 IIS 处理线程。

更新:

抱歉没有具体说明,但我指的是 IIS 线程池线程。那就是当一个 http get 请求进入我的 webapi 服务器时,我的服务器一次可以处理多少个并发 http get 请求(每个逻辑 cpu)?我正在尝试根据我的服务器可以处理的请求数来计算一些阈值容量数,该请求数基于我得到的平均响应时间,大约为 500 毫秒。

4

1 回答 1

4

http://msdn.microsoft.com/en-us/library/system.threading.threadpool

每个进程有一个线程池。从 .NET Framework 4 开始,进程的线程池的默认大小取决于几个因素,例如虚拟地址空间的大小。进程可以调用 GetMaxThreads 方法来确定线程数。可以使用 SetMaxThreads 方法更改线程池中的线程数。每个线程使用默认堆栈大小并以默认优先级运行。

http://blogs.msdn.com/b/tmarq/archive/2007/07/21/asp-net-thread-usage-on-iis-7-0-and-6-0.aspx

因此对于 IIS 7.0 集成模式,HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\2.0.50727.0 中名为 MaxConcurrentRequestsPerCPU的 DWORD确定并发请求的数量每个 CPU。默认情况下,它不存在,并且每个 CPU 的请求数限制为 12。如果您想知道在没有线程切换的情况下 ASP.NET 请求的执行速度有多快,您可以将该值设置为 0。这将导致在 IIS I/O 线程上执行的请求,而不切换到 CLR 线程池线程。我不建议这样做主要是因为动态请求相对于静态请求执行时间较长,而且我相信线程切换后系统的整体性能会更好。但是,这很重要,如果您的应用程序主要或完全由异步请求组成,则默认的 MaxConcurrentReqeustsPerCPU 限制 12 对您来说过于严格,尤其是在请求运行时间很长的情况下。在这种情况下,我建议设置MaxConcurrentRequestsPerCPU到一个非常高的数字。事实上,在 v4.0 中,我们将 MaxConcurrentRequestsPerCPU的默认值更改为 5000。5000并没有什么特别之处,只是它是一个非常大的数字,因此可以同时执行大量异步请求。

于 2013-03-12T22:20:04.687 回答