Response.Write(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "<br /><br /><br />线程等待...<br />"); if (Request["a"] != null)
{
System.Threading.Thread.Sleep(10 * 1000);
} Response.Write(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
//同时开了两个窗口
//我先执行 http://localhost/WebSitet/test.aspx?a=100
//然后马上 http://localhost/WebSitet/test.aspx
//http://localhost/WebSitet/test.aspx立刻就执行完毕 前后时间一样
//并未出现楼主说的后者等待前者的问题啊....
{
System.Threading.Thread.Sleep(10 * 1000);
} Response.Write(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
//同时开了两个窗口
//我先执行 http://localhost/WebSitet/test.aspx?a=100
//然后马上 http://localhost/WebSitet/test.aspx
//http://localhost/WebSitet/test.aspx立刻就执行完毕 前后时间一样
//并未出现楼主说的后者等待前者的问题啊....
我现在又开了一个MYIE后面的请求就不会给阻塞了这样说来是否对同一个机器的请求,总是放在一个线程中的?
楼主说的情况应该是在同一个浏览器上测试的,这样的话对于同一个Session,clr应该调用的是同一个线程里的方法,所以会等待
也就是说,假如有N个人通过浏览器访问服务器,那么IIS先把请求放在缓存里,等待aspnet_isapi.dll来提取请求。并不是说请求来了直接送到clr。这里是一个分层的思想
如果每次都达到服务器并要求aspnet_isapi.dll生成响应的话,不可能每个用户一个线程,那aspnet_isapi.dll是不是还要维持这个对应关系,人家才懒得管你呢。肯定是线程池的。再说Http请求本身是无状态的,第一次请求和第二次请求,服务器不会说认出你这小子以前来过的,原理上讲,那解决这个问题的方法不就是http的一块小甜点心,cookie么!
http://download.microsoft.com/download/iis50/Utility/5.0/NT45/EN-US/MtaEdt22.exe
用这个工具可以更改默认线程
.aspx的 解析
本身就是 多 线程的
如果是在IIS端 达到了 允许的线程数量
那么.aspx等待 空闲那是正常的但是如果只是说
只有一个人在用a.aspx
但是在其中 使用了
System.Threading.Thread.Sleep(10 * 1000);
//-- 我的理解这个相对IIS来说 应该算是. 纤程
______________________________________________________