2013-11-25 39 views
0

我的代碼是線程池,它提供線程

static void Main(string[] args) 
{ 
    for (int i = 0; i < 100; i++) 
    { 
     ThreadPool.QueueUserWorkItem(y => 
     { 
      Console.WriteLine(Thread.CurrentThread.ManagedThreadId); 
      Thread.Sleep(3000); 
     }); 
    } 
    Console.Read(); 
} 

當我開始計劃,並期待在sos.dll我可以看到,每一次線程池爲我提供4-5個線程。因此池發生延遲,因爲池不會提供更多的線程。 這是怎麼回事?

+2

你的機器有多少核心? – doctorlove

+0

除非你有8個或更多內核,否則4 - 5可能相當不錯,沒有顛簸?另外,您是否閱讀過[documentaion](http://msdn.microsoft.com/en-us/library/system.threading.threadpool(v = vs.110).aspx)? – crashmstr

回答

3

ThreadPool Class

有每個進程一個線程池。從.NET Framework 4開始,進程的線程池的缺省大小取決於幾個因素,例如虛擬地址空間的大小。進程可以調用GetMaxThreads方法來確定線程的數量。 可以使用SetMaxThreads方法更改線程池中的線程數。每個線程都使用默認堆棧大小,並以默認優先級運行。

作爲附加說明,根據系統資源(如CPU內核,RAM等),更多的線程可能不會使您的應用程序運行得更快。