2016-07-24 14 views
2

我正在学习线程。我在C#中使用.NET Framework 4.5.2和Windows 10 x64。“资源监视器”向我显示的线程数多于我在程序中写入的线程数

我写了一个简单的程序有两个线程,一个大循环中的每一个:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Thread t = new Thread(foo); 
     t.Start(); 
     for (int i = 0; i < 99999999; i++) 
     { 
      Console.WriteLine("x"); 
     } 

    } 

    static void foo() 
    { 
     for (int i = 0; i < 99999999; i++) 
     { 
      Console.WriteLine("y"); 
     } 
    } 
} 

当我运行该程序的最终版本,在“资源监视器”我读它在运行多两个线程。

它使我明白我们不能对应用程序的执行方式有一个真正的控制,只有我们可以说“我想同时运行X而不是Y”,但没有严格的(真实的)控制将要创建的线程数量。那是对的吗?

我想知道这种行为的解释。

这里我刚才解释的一个形象: threads

+0

如何使用调试器并简单检查线程窗口? –

回答

3

您有至少三个线程,当你不附加一个调试器,并不会产生任何额外的线程中运行你的应用程序。

请记住垃圾收集器在单独的线程上工作。此外,终结器在单独的线程上工作。主线在这个讨论中是微不足道的。

当您看到更多线程时,您需要记住,使用Visual Studio进行调试时,会运行与调试相关的线程。

为了测试,创建一个简单的程序,像下面:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Console.ReadKey(); 
    } 
} 

构建应用程序,并使用可执行文件(如果没有的Visual Studio调试器附后)运行它,你会看到正好3个线程在资源监视器。