簡體   English   中英

線程池未按預期使用線程?

[英]Thread-pool don't use threads as expected?

我試圖查看當我極端使用線程池時線程池會發生什么:

所以我運行了這個測試:

void Main()
{ 
  int AvaliableWorker,AvaliableioCompletion,MaxWorker,MaxioCompletion;

  for (int i=0;i<1028;i++) Task.Factory.StartNew(()=>{Thread.Sleep(5000);});

  Thread.Sleep(2000); // give the loop some time to run threads....

  ThreadPool.GetAvailableThreads(out AvaliableWorker, out AvaliableioCompletion);
  Console.WriteLine("{0} / {1}", AvaliableWorker, AvaliableioCompletion);

  ThreadPool.GetMaxThreads(out MaxWorker, out MaxioCompletion); 
  Console.WriteLine("{0} / {1}", MaxWorker, MaxioCompletion); 

}

但是,當我在.net4/32bit環境(控制台)上運行它時,得到以下結果:

**1015** / 1000
1023 / 1000

再次運行:

**1009** / 1000
1023 / 1000

問題是關於粗體數字:

Fw.4設置默認的最大線程池工作線程最大創建數為1023 (如您所見)。

但是看着GetAvailableThreads

在此處輸入圖片說明

如果是這樣, 當我使1028線程進入睡眠狀態時 ,為什么我仍然會得到1015 , 1009這樣的大值?

我的意思是, 1023-1028 = negative number :(換句話說: “我的朋友不再有線程,我現在將通過每秒2個線程按需創建它們, 但這是另一個不相關的主題 )”

當我使1028個線程進入睡眠狀態時對嗎?

你沒有 您排隊約1000個任務,而不是(尚未)線程。 當您WriteLine()結果時,仍在等待運行。

此時的實際池線程數:1023-1015 = 8。

使for循環后的Sleep()稍長一些(幾秒鍾),您將看到較少的可用線程,即較多的池線程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM