询问线程/多线程/线程总数

时间:2013-02-13 07:38:05

标签: c# multithreading windows-services

我之前有一个关于我的应用程序中的线程数的问题,但我没有澄清我的一些问题。所以我在这里请求你的专家解释/回答我的简单调查。

只是我的问题的背景,我正在调查我们的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)
  3. 样品:

    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个核心。如果我的问题对某人没有意义,我很抱歉。我只是想了解更多这些。

0 个答案:

没有答案