2010-08-10 161 views

回答

9

線程池在所有應用程序域共享 - 因爲那意味着線程可能最終應用程序域之間的切換也一直圍繞着PERF工作(可能常常!):

http://blogs.msdn.com/b/ericeil/archive/2009/04/23/clr-4-0-threadpool-improvements-part-1.aspx

[...]事實上,我們違反本「規定」 不已:在 過程中的每個應用程序域,因爲.NET 3.5中,CLR 線程池一直保持獨立的 FIFO隊列,併爲「原生」工作的一個額外的獨立 FIFO隊列我例如由主機 (ASP.net是此 功能的主要用戶)排隊的那些電話 。 這些工作隊列之間我們輪循,讓每個到 前一段時間執行工作移動到下一個。[...]

BTW,注意嚴格來說線程池不共享在整個過程中,因爲v4 CLR允許並行加載V2,並且每個都有自己的線程池。

0

不是100%肯定的,但我認爲線程池是每個進程一次 ,而不是每個AppDomain一次。試着看一下這篇文章的thread & appdomain

4

線程池的所有應用程序域之間共享,因爲每個線程池線程上下文無關,整個線程池運行時配置文件是高度依賴於硬件,你是在特效的(#運行,超線程等)

每個進程有一個線程池。 線程池的默認大小爲每個可用處理器的25個線程的 。 可以使用 SetMaxThreads方法更改線程 池中的線程數。每個線程使用默認堆棧大小 ,並以 默認優先級運行。

來源:http://msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx

如果我沒有記錯的CLR內部處理線程池線程和服務工作的另一個請求之前清理線程上下文。

+1

這是指向.NET 4最新文檔的鏈接。http://msdn.microsoft.com/en-us/library/system.threading.threadpool.aspx。每個可用處理器有250個工作線程。 – btlog 2010-08-10 10:08:28

相關問題