C# &引用;“资源监视器”;显示的线程比我在程序中编写的两个线程多

C# &引用;“资源监视器”;显示的线程比我在程序中编写的两个线程多,c#,.net,windows,multithreading,C#,.net,Windows,Multithreading,我正在学习线程。我使用C#和.NETFramework 4.5.2以及Windows10x64 我编写了一个简单的程序,其中有两个线程,每个线程中有一个大循环: class Program { static void Main(string[] args) { Thread t = new Thread(foo); t.Start(); for (int i = 0; i < 99999999; i++) {

我正在学习线程。我使用C#和.NETFramework 4.5.2以及Windows10x64

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

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");
        }
    }
}
类程序
{
静态void Main(字符串[]参数)
{
螺纹t=新螺纹(foo);
t、 Start();
对于(int i=0;i<9999999;i++)
{
控制台。写入线(“x”);
}
}
静态void foo()
{
对于(int i=0;i<9999999;i++)
{
控制台。写入线(“y”);
}
}
}
当我运行程序的最终版本时,在“资源监视器”中,我读到它正在运行两个以上的线程

这让我明白,我们不能真正控制应用程序的执行方式,只能说“我想在Y的同时运行X”,但不能严格(真正)控制将要创建的线程数。对吗

我想知道这种行为的解释

这是我刚才解释的图像:

运行应用程序时,如果未连接调试器,也未创建任何附加线程,则至少有三个线程

请记住,垃圾收集器在单独的线程上工作。此外,终结器在单独的线程上工作。在本次讨论中,主线是无关紧要的

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

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

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

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

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