C# 线程池don';你不能按预期使用线程吗?

C# 线程池don';你不能按预期使用线程吗?,c#,.net-4.0,threadpool,C#,.net 4.0,Threadpool,我试图了解当我极度使用线程池的线程时,线程池会发生什么情况: 所以我运行了这个测试: 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 lo

我试图了解当我极度使用线程池的线程时,线程池会发生什么情况:

所以我运行了这个测试:

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); 

}
再次运行:

**1009** / 1000
1023 / 1000
问题是关于粗体数字:

问题

Fw.4
将默认最大线程池工作线程创建设置为
1023
(如您所见)

但是查看
GetAvailableThreads

如果是这样的话,为什么当我让1028个线程睡眠时,我仍然得到像
10151009
这样的大值呢

我的意思是,
1023-1028=负数
:(换句话说:“朋友,不再有线程了,我现在将通过每秒2个线程按需创建它们-但这是另一个无关的主题)

就在我让1028个线程睡觉的时候

您没有。您排队等待了大约1000个任务,而不是(尚未)个线程。当您编写结果时,仍在等待运行

此时池线程的实际数量:1023-1015=8


使for循环后的Sleep()稍长一点(秒)你会看到可用线程的数量更少,即池线程的数量更多。

Henk我不明白。在主线程完成2秒延迟后,有1000个
>1000个
线程在执行
睡眠
。那么我怎么会看到
~1000个
可用线程呢?不,队列中有1000个任务,而t中只有~8个线程he Pool.Henk,我改为50秒睡眠,10秒等待,这仍然是一个很大的数字。(10秒不够运行1024个线程吗?)
GetMaximumThreads
-
getAvailableThreads
是当前在您的系统中工作的线程数application@RoyiNamir-否,10秒将最多向池中添加2*10个线程。
**1009** / 1000
1023 / 1000