【发布时间】:2022-01-03 18:47:10
【问题描述】:
是否可以查看线程池的队列中有多少线程正在等待执行?
如果我这样做:
for (int i = 0; i < 5000; i++)
{
tasks.Add(Task.Run(() => { TaskTest(); }));
}
Task.WaitAll(tasks.ToArray());
在 TaskTest 中,我做了一些通常需要大约 500 毫秒的工作,我还更新了一个具有最高线程数的变量:
ThreadPool.GetMaxThreads(out maxthreads, out completionthreads);
ThreadPool.GetAvailableThreads(out availablethreads, out completionthreads);
int threads_in_use = maxthreads - availablethreads;
mHighwaterThreads = Math.Max(mHighwaterThreads, threads_in_use);
我的电脑的最大线程数通常在 32000 以上。mHighwaterThreads 通常在 75 左右。
我想知道是否有办法查看线程池中有多少线程正在等待执行。
【问题讨论】:
-
你的意思是线程池中有多少任务正在等待运行
-
如果你需要知道那你就错了。
-
@Hans,我有一个服务器,每个传入的请求都会创建一个任务。其中一些任务会创建子任务。整个系统有很多组件,这只是我希望查看的另一个数字,它可能会导致任何性能线索。所以不,我不需要知道,但这会很有趣。
-
@pm100 是的,这就是我要找的。span>
-
@Cuthbert 不,他没有做错!我们需要能够观察系统的健康状况:线程池的线程数是由 .NET 自动调整的,但是您如何知道您的代码运行良好或即将死亡?您可以观察线程池队列长度,它不能永久增加。
标签: c# multithreading