【问题标题】:Thread limit per session?每个会话的线程限制?
【发布时间】:2013-08-23 14:01:38
【问题描述】:

我有一个通过 Jquery Ajax 请求异步加载 10 个图表的 aspx 页面。请求是向实现 IReadOnlySessionState 的通用处理程序发出的,因为需要访问会话变量,但它是读取,这样我就不会受到 asp.net 实现的读写会话锁定的影响。

通过调试器,我可以看到调用是异步发生的,但似乎存在限制,因为某些调用仅在前几个调用完成后才进入代码。我不确定这是 IIS 上的设计还是 web.config 中的属性。

一个用户/会话一次可以拥有的线程数是否有限制?

【问题讨论】:

  • 您在 AJAX 或服务器上谈论的限制在哪里。在服务器上,由于创建一个新线程的成本很高,所以线程是从线程池中提取的,我猜它有 25 个线程的限制。如果您在谈论浏览器(AJAX 请求),那应该取决于任何特定浏览器的实现
  • 有一个叫做 ThreadPool.SetMaxThreads 的属性你可以探索
  • 据我了解,浏览器对发送到服务器的并发请求有限制。我找不到链接,我一拿到它就会发布它。
  • 请求立即离开浏览器,我可以在嗅探器上看到它们,一次大约有 10 个请求,我没有超过 25 个。瓶颈似乎在 webserver/iis。我尝试设置最大池大小,但没有帮助。
  • 你检查过,如果瓶颈不是硬件本身。根据您使用的 Async/Task/Thread - 框架,如果 CPU 被充分利用,.Net 可能会停止运行新任务

标签: c# asp.net .net iis


【解决方案1】:

IIS 和 asp.net 处理线程的方式取决于您使用的 IIS 版本。工作线程的数量有限制,并且必须保留可用的线程数量有上限。这意味着一次只能执行一定数量的线程。

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

如果您的 ASP.NET 应用程序正在使用 Web 服务(WFC 或 ASMX)或 System.Net 通过 HTTP 与后端通信,您可能需要 增加connectionManagement/maxconnection。对于 ASP.NET 应用程序,这被 autoConfig 功能限制为 12 * #CPU。

同样来自同一篇文章:http://support.microsoft.com/kb/821268

如果您长时间运行来自 AJAX 的 HTTP 请求,最好的办法是执行异步 http 请求处理程序。然后请求可以在 IO 线程上等待,因为 asp.net 的 IO 线程比工作线程多得多。

见:http://www.asp.net/web-forms/tutorials/aspnet-45/using-asynchronous-methods-in-aspnet-45

【讨论】:

  • 我不认为这是相关的,我也使用 .net 3.5 抱歉忘了提及它。不过谢谢!
  • 您使用的是哪个版本的 IIS?
  • 我在 IIS 7 上使用集成模式。
  • 在上面的博客中提到,在 IIS 6.0 中,应用程序可能只有很少的线程。
  • 你试过显式指定线程池 maxConcurrentRequestsPerCPU 吗?
猜你喜欢
  • 2020-01-21
  • 1970-01-01
  • 2019-01-24
  • 1970-01-01
  • 1970-01-01
  • 2018-10-06
  • 2021-11-18
  • 2012-05-17
  • 2012-08-14
相关资源
最近更新 更多