线程,线程池和Unity的ThreadScope

时间:2014-08-01 13:07:39

标签: asp.net asp.net-mvc unity-container

我有一个关于线程的问题,ASP.net的线程池和Unity的Thread Scope对象范围。据我所知,ASP.net网站的每个请求都有自己的线程&当请求完成时,线程返回到线程池。这是对的吗?

如果确实如此,那么它如何影响Unity中线程范围的使用?如果我们使用它并且线程最终返回到线程池中,那么Unity对象是否会粘在一起?当线程发送到池中时,线程是否对其变量执行任何垃圾回收?它必须做一些事情,因为它处理不同的请求。

我想我的问题是,什么时候线程被垃圾收集?

Unity Object Scope Definitions

1 个答案:

答案 0 :(得分:1)

请注意,.NET Thread对象与它所代表的线程不同。后者是一个操作系统概念,即使.NET线程已从Windows线程中抽象出来,您也可以假设.NET线程能够从Windows线程执行代码,除非您处于异国情调的环境中。

  

我想我的问题是,什么时候线程被垃圾收集?

Thread个对象只能在关联的线程终止且无法从任何GC根目录到达Thread时进行垃圾回收。只要它们位于线程池中,.NET线程池中的Thread个对象就不会被垃圾回收。

如果在Unity中使用PerThreadLifetimeManager,则每个线程都会有一个单独的实例。从同一个线程对Resolve的每次调用都将返回相同的实例,但是从不同的线程调用Resolve将返回不同的实例。

请注意,当关联的线程终止时,PerThreadLifetimeManager将不会处置任何实例。

如果在ASP.NET代码中使用async和await,则可以由多个线程处理单个请求。

PerThreadLifetimeManager构建在线程本地存储之上,可用于提高多线程代码的性能。但是,线程本地存储通常会令人困惑,我认为除非确实有必要,否则不应该使用它。

相关问题