Я хочу знать количество активных потоков (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)
потоков.