2016-07-24 40 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個線程在資源監視器。