“资源监视器”向我展示了比我在程序

时间:2016-07-24 18:09:46

标签: c# .net windows multithreading

我正在学习线程。我使用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");
        }
    }
}

当我运行该程序的最终版本时,在“资源监视器”中我读到它运行了两个以上的线程。

这让我明白,我们无法真正控制我们的应用程序将如何执行,只有我们可以说“我想在Y的同时运行X”,但没有严格的(真实的)控制将要创建的线程数。那是对的吗?

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

这里是我刚才解释的图片: threads

1 个答案:

答案 0 :(得分:4)

在没有附加调试器且没有创建任何其他线程的情况下运行应用程序时,至少有三个线程。

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

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

要测试它,请创建一个如下所示的简单程序:

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

构建应用程序,并使用可执行文件(不使用Visual Studio调试程序)运行它,您将在资源监视器中看到正好3个线程