请教一个关于ASP.NET线程的问题

antoniusguo 2010-08-13 03:01:35
从请求开始,到响应结束,是否可以确定是同一个线程在处理请求?

各位有资料的话也请发一个引用地址吧,万分感谢。
...全文
268 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zakumiwb 2010-08-14
  • 打赏
  • 举报
回复
hefuming5 2010-08-14
  • 打赏
  • 举报
回复
线程正学习中 帮顶
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 ly_longyue 的回复:]
http://www.cnblogs.com/rijing2004/archive/2007/09/14/howaspnetwork.html

超级详细
.NET 访问 机制
[/Quote]
顺便学习了一把,的确够详细
从中可以找到楼主想要的答案:请求是由ISAPI通过ECB异步调用多个线程来实现的
ecb参数是ISAPI扩展控制块(extension control block),它被作为非托管资源传给ProcessRequest方法。此方法将获取ECB,然后把它作为基本的输入和输出接口,用于Request和Response对象。ISAPI ECB包含着所有底层的请求信息,这其中包括服务器变量,用于表单变量(form variables)的输入流,以及用于写数据并把数据发送到客户端的输出流中。一个单独的ECB引用基本上提供了一个ISAPI请求可以访问的所有功能。ProcessRequest既是登录点也是登出点,在这里非托管资源最先与托管代码相联系。

ISAPI扩展以异步的方式处理请求。所以,当ISAPI扩展调用了工作进程或者IIS的线程后,会立即返回,但会为当前有效的请求保留ECB。因此,ECB需要包含这样的机制,即当请求结束的时候通知ISAPI(通过ecb.ServerSupportFunction实现),然后ISAPI扩展释放ECB资源。接着以异步的方式立即释放ISAPI工作线程,和卸载由ASP.NET托管的那个隔离的处理线程。

ASP.NET得到ecb引用后,会在内部使用它来获取当前请求的相关信息,如服务器变量,POST的数据以及返回输出到客户端的数据。Ecb将继续存活直到这个请求结束或者IIS超时,在这之前,ASP.NET将会与ecb继续保持通信。当请求结束的时候,输出的内容会写进ISAPI的输出流里(通过ecb.WriteClient()实现)。然后ISAPI扩展会被通知请求已经结束,让它知道ECB可以被释放了。这个执行过程是非常高效的,这是因为,.NET类本质上只是担当着一个相当瘦小的包装器,而它包装的内容就是具有高性能的非托管ISAPI ECB。


你将会观察到AppDomain ID一直保持不变,而线程和HttpApplication的ID在请求多的时候会发生改变,尽管它们会出现重复。这是因为HttpApplications是在一个集合里面运行,下一个请求可能会再次使用同一个HttpApplication实例,所以有时候HttpApplication的ID会重复。注意,一个HttpApplication实例对象并不依赖于一个特定的线程,它们仅仅是被分配给处理当前请求的线程而已。
antoniusguo 2010-08-13
  • 打赏
  • 举报
回复
好像问题变成了 ASP.NET何时回收工作线程。
myhope88 2010-08-13
  • 打赏
  • 举报
回复
不太懂,帮顶下
antoniusguo 2010-08-13
  • 打赏
  • 举报
回复
ASP.NET允许异步处理请求,因此在最后可能由不同的线程来处理,不过我想知道的是,在明确指定不用异步处理的情况下,ASP.NET是否会因为垃圾回收等原因回收线程,造成使用不同的线程来处理同一个请求。

发这个贴是因为我尝试使用线程槽来保存数据,但是我不确定线程是否会被替换。
hmily821023 2010-08-13
  • 打赏
  • 举报
回复
我个人认为不是
首先iis支持并发
iis--》httphandler--》httpmoudle...
最后在返回给httphandler 但不一定是同一个httphandler
以管道形式进行 各个部分独自处理
所以多线处理更好

个人观点
龍月 2010-08-13
  • 打赏
  • 举报
回复
http://www.cnblogs.com/rijing2004/archive/2007/09/14/howaspnetwork.html

超级详细
.NET 访问 机制
sywcf 2010-08-13
  • 打赏
  • 举报
回复
帮顶,向楼下学习
symbol_bc 2010-08-13
  • 打赏
  • 举报
回复
我觉得宏观上可以这样认为,等待高人解答。

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧