定义线程池的当前大小在.NET

时间:2019-02-02 18:25:56

标签: c# .net multithreading threadpool clrmd

我想知道线程池中活动线程(iocp和worker)的数量。我使用这种技术:

ThreadPool.GetAvailableThreads(out var workerAvailable, out var iocpAvailable);
ThreadPool.GetMinThreads(out var workerMin, out var iocpMin);
ThreadPool.GetMaxThreads(out var workerMax, out var iocpMax);

var total = Process.GetCurrentProcess().Threads.Count;
var workerCurrent = workerMax - workerAvailable;
var iocpCurrent = iocpMax - iocpAvailable;
var other = total - worker - iocp;

日志中有非常奇怪的数字:8 worker,3 iocp和150 other个线程。

我使用procdump工具进行了转储,并使用ClrMdClrThread.IsThreadpoolCompletionPortClrThread.IsThreadpoolWorker属性)对其进行了检查。最终,我从转储中得到了不同的结果:99 worker和14 iocp个线程。

为什么第一种方法会返回如此奇怪的结果?

UPD::我想ThreadPool.GetAvailableThreads返回max minus currently active (not idle)个线程。

0 个答案:

没有答案