2013-02-11 26 views
2

當我的asp.net應用程序啓動時,我在一個進程中有大約40個關聯的線程。這是正常的嗎?對於noob問題抱歉。運行(狀態)的實際線程取決於我的機器的核心。例如,在4核心的PC上運行,即時獲得1-4個正在運行的線程(並行),並且一個進程中的線程總數約爲38-42。當在24核心pc上運行應用程序時,im仍然會繞過38-42個線程。這些進程中的線程數是否正常?

我爲獲得運行的線程數代碼:

((IEnumerable)Process.GetCurrentProcess().Threads) 
       .OfType<System.Diagnostics.ProcessThread>() 
       .Where(t => t.ThreadState == System.Diagnostics.ThreadState.Running) 
       .Count() 

代碼用於獲取的線程總數:

Process.GetCurrentProcess().Threads.Count 

有人可以解釋這對一個菜鳥像我..

在此先感謝。

+0

此外,有時我得到在24芯機的並行任務的峯值期間的進程相關聯大約90個線程。但是經過長時間的並行處理完成後,線程數將回到42左右。 – hisoka21 2013-02-11 10:09:58

+2

您的CurrentProcess是IIS。而且,對於IIS來說,至少有少數線程是正常的。 – 2013-02-11 10:14:21

+0

嗨Henk!感謝您及時的回覆。你的意思是我使用上面的代碼得到的線程總數不是僅由我的應用程序生成的? – hisoka21 2013-02-11 10:21:03

回答

2

你的ASP.NET網站在Application Pool運行,這將有一定數目的線程,如果需要,可以產生更多。每個請求都在單獨的線程中處理,因此IIS將保留一些線程等待請求,因爲使用現有線程比在需要時啓動新線程更快。

IIS也將在Thread Pool空閒線程應用程序使用。

所以,是的,這是正常的IIS有多個線程。

+0

嗨IlariMäkimattila,我不明白的是,如果我的當前進程中有大約40個線程,爲什麼線程數量增加到90個線程(如果我的機器中只有24個內核)。 40個線程不足以支持24個線程(核心)嗎?爲什麼IIS線程池不斷創建新線程? – hisoka21 2013-02-12 01:53:29

+1

這不一定是線程池產生新的進程。 IIS工作人員可能是創建它們的人員。它將線程集中起來,僅僅是因爲讓它們躺在周圍比按需創建新的更便宜。它可能永遠不需要所有這些。 – 2013-02-15 11:35:39

相關問題