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