Определить текущий размер пула потоков в .NET - PullRequest
0 голосов
/ 02 февраля 2019

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

...