我想知道线程池中活动线程(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工具进行了转储,并使用ClrMd(ClrThread.IsThreadpoolCompletionPort
和ClrThread.IsThreadpoolWorker
属性)对其进行了检查。最终,我从转储中得到了不同的结果:99 worker
和14 iocp
个线程。
为什么第一种方法会返回如此奇怪的结果?
UPD::我想ThreadPool.GetAvailableThreads
返回max minus currently active (not idle)
个线程。