0

我之前在这里有一个关于我的应用程序中的线程数的问题,但我没有澄清我的一些问题。因此,我在这里向您寻求专家的解释/对我卑微的询问的回答。

只是我的问题的背景,我正在调查我们的 Web 应用程序/Windows 服务中的线程是否存在问题/问题。所以我所做的是创建一个额外的日志文件来记录当前正在运行的线程数、当前等待的线程数和 CurrentProcess 中的线程总数。根据日志,应用程序空闲时总共有大约 40 个线程。

Process.GetCurrentProcess().Threads.Count

我之前的问题是“这个线程数正常吗?” 我知道这是一个模糊的问题,这就是我得到这些答案的原因。

您的 CurrentProcess 是 IIS。是的,IIS 至少有少量线程是正常的。

您的 ASP.NET 站点在应用程序池中运行,该应用程序池将具有一定数量的线程,并且如果需要可能会产生更多线程。每个请求都在单独的线程中处理,因此 IIS 将保留一些线程等待请求,因为使用现有线程比在需要时启动新线程更快。IIS 还将在线程池中有备用线程供您的应用程序使用。所以是的,IIS 有多个线程是正常的。


所以我所做的就是在我的windows服务启动时专门添加日志,以了解服务启动时的线程数以及之后的代码。

  1. 在 Main() 开始时:15 个线程 - 这些线程是什么?根据我的日志,这些线程中有 14 个具有“等待”线程状态。这些线程是做什么用的?请有人能解释一下这个..
  2. 初始化 ServiceHost 列表后 - 16 线程(增加 1)

样本:

this.myServiceHosts = new[]
{
    new ServiceHost(typeof(MyCachingService)),
    new ServiceHost(this._myAService),
    new ServiceHost(new myBService(new BManager()))
};

//Why is it increased by 1 with this code? Or this code does not have anything to do in the thread count increase?

3. 在我的 Windows 服务的 OnStart() 方法中,我打开了列表中的所有服务主机。我在一个循环中执行下面的代码:

myServiceHost.Open();

我注意到在执行一次上面的代码后(注意:我的列表中有 7 个 ServiceHost),线程数增加了 6 个,并且在执行下一个 6 个 ServiceHost.Open() 后不再增加。

注意:我的测试机有 4 个核心。如果我的问题对某人没有意义,我很抱歉。我只是想了解更多这些。

4

0 回答 0