2013-02-11 20 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

相关问题