ASP.net 的工作线程与请求队列

ASP.net工作线程池

当 ASP.NET 接收针对页的请求时,它从线程池中提取一个线程并将请求分配给该线程。

一个普通的(或同步的)页在该请求期间保留线程,从而防止该线程用于处理其他请求。如果一个同步请求成为 I/O bound(例如,如果它调用一个远程 Web 服务或查询一个远程数据库,并等待调用返回),那么分配给该请求的线程在调用返回之前处于挂起状态。 这影响了可伸缩性,原因是线程池的可用线程是有限的。

这个数字的设置是在 machine.config 的 下述节点的 maxWorkerThreads 属性

<system.web>
	<processModel requestQueueLimit="num|Infinite" maxWorkerThreads="num"  />

  
  system.web>

maxWorkerThreads
按 CPU 配置用于进程的辅助线程的最大数目。例如,如果单处理器服务器上的该值为 25,ASP.NET 使用运行时 API 将进程限制设置为 25。在双处理器服务器上,该限制设置为 50。该属性的值必须等于或大于 httpRuntime 配置节中的 minFreeThread 属性设置。
该属性的范围是从 5 到 100。

ASP.net请求队列

上述设置中,还有一个队列设置,如下:


requestQueueLimit
指定队列中允许的请求数,超过此数目后,ASP.NET 将开始向新请求返回“503 - 服务器太忙”消息。

 

默认情况下,这个可用分线程数为1000。下图为IIS6和IIS7中这个参数的设置地方。

IIS 7 的可用线程数设置

IIS 6 的可用线程数设置

 

如果所有请求处理线程全部阻塞以等待 I/O 操作完成,则其他请求排入队列等待线程释放。

最好的情况是吞吐量减少,因为请求等待较长的时间才能得到处理。

最坏的情况则是该队列填满,并且 ASP.NET 因 503“Server Unavailable”错误使后续请求失败。

 

参考资料:

在服务器端 Web 代码中使用线程和生成异步处理程序
http://msdn.microsoft.com/zh-cn/library/aa686076.aspx

ASP.NET 2.0 中的异步页
http://www.microsoft.com/china/msdn/library/webservices/asp.net/issuesWickedCodetoc.mspx

IIS 6.0 架构
http://blog.csdn.net/heaven_pl/archive/2008/02/19/2106572.aspx
http://blog.csdn.net/heaven_pl/archive/2008/02/19/2106579.aspx


IIS 7.0 架构
http://blog.csdn.net/SKY_VID/archive/2008/03/04/2147732.aspx

 

了解ASP.NET底层架构
http://blog.csdn.net/fanweiwei/archive/2007/04/10/1558912.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值