c# - "Resource Monitor"向我展示了比我在程序中编写的两个线程更多的线程

标签 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");
        }
    }
}

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

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

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

这是我刚才解释的图像: threads

最佳答案

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

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

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

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

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

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

关于c# - "Resource Monitor"向我展示了比我在程序中编写的两个线程更多的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38555182/

相关文章:

windows - 线程输入队列

c# - C# 6.0 中的类是否可以具有 protected 主构造函数?

c# - 应用程序崩溃而没有在 Windows Phone 8.1 xaml 中抛出任何异常

c# - ASP 登录控件 - 检查登录状态

windows - 如何在 Windows 命令提示符批处理文件中使用嵌套 FOR 内的 SET/A 来增加数值?

c# - 检索任何窗口的所有控件及其类型和值

c# - 如何为字体和颜色中的新分类器创建 VS 2017 扩展?

c# - 为什么我会收到 ReSharper 错误 "The extracted code has multiple entry points"?

c# - System.Reflection - 如何调用子级别类型的 getter 方法?

c# - 通过 C#.Net 创建/连接 VPN 连接