【问题标题】:How many threads per logical cpu can IIS7.5 64bit handle at once?IIS7.5 64bit 一次可以处理多少个逻辑 CPU 线程?
【发布时间】:2013-03-14 01:21:22
【问题描述】:

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

更新:

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

【问题讨论】:

  • 这取决于线程在做什么。考虑使用异步操作来完全避免线程。
  • 同意 SLaks,事实上 IIS 默认会使用 12 个线程,但是你拥有的几乎所有动态内容(无论是 PHP、ASP.NET 等)都有自己的线程池,这在某些方面使12个线程的具体答案并不有趣。这些线程只会用于内容(无论如何都是异步的)并处理对动态内容处理程序(如 ASP.NET 管道,甚至是经典的 ASP 模块)的请求,因此很少使用。你在跑什么? ASP.NET?
  • @SLaks:抱歉没有具体说明,但我指的是 IIS 线程池线程。那就是当一个http get请求进入我的webapi服务器时,我的服务器一次可以处理多少并发http get请求(每个逻辑cpu)?我正在尝试根据我的服务器可以处理的请求数来计算一些阈值容量数。
  • @JaJ:如果你正确使用异步,这个数字几乎是无关紧要的。

标签: iis iis-7 iis-7.5


【解决方案1】:

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

每个进程有一个线程池。从 .NET 开始 框架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 集成模式,一个名为 MaxConcurrentRequestsPerCPU 内 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ASP.NET\2.0.50727.0 确定 每个 CPU 的并发请求数。默认情况下,它不 存在并且每个 CPU 的请求数限制为 12。如果您是 很想知道没有 ASP.NET 请求的执行速度有多快 线程切换,可以将值设置为0。这样会导致请求 在 IIS I/O 线程上执行,无需切换到 CLR 线程池线程。我不推荐这个主要是因为动态 相对于静态请求,请求需要很长时间才能执行,并且 我相信系统的整体性能更好 线程切换。但是,这很重要,如果您的应用程序 主要或完全由异步请求组成,默认 MaxConcurrentReqeustsPerCPU 限制为 12 对 你,特别是如果请求运行时间很长。在这种情况下,我 建议将 MaxConcurrentRequestsPerCPU 设置为非常高 数字。事实上,在 v4.0 中,我们已经将默认设置更改为 MaxConcurrentRequestsPerCPU 到 5000。没什么特别的 5000,除了它是一个非常大的数字,因此将允许 大量异步请求同时执行。

【讨论】:

  • 谢谢!什么被定义为CPU?我有一个具有 6 个内核和 12 个逻辑处理器的处理器。这是否意味着它将使用 5000 个并发请求 @6 或 @12 个单位?
猜你喜欢
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
  • 2023-02-04
相关资源
最近更新 更多