2

我想知道线程池中活动线程(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、3workeriocp150个other线程。

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

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

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

4

0 回答 0