Я немного запутался в одном аспекте .NET ThreadPool: а именно, как вы можете определить, сколько из его «Доступных» потоков простаивает, ожидающих повторного использования, и сколько еще не было создано.
В сводке по методу GetAvailableThreads()
указано, что:
Получает разницу между
максимальное количество потоков пула потоков
возвращается методом GetMaxThreads,
и номер в настоящее время активен.
Любой «активный» поток занят работой и, следовательно, недоступен для повторного использования, но сколько из них «доступно» для повторного использования по сравнению с «доступным», поскольку они не были созданы?
Я знаю, что метод GetMinThreads()
возвращает абсолютное минимальное количество потоков, которые фреймворк будет поддерживать в пуле для повторного использования, но это не обязательно соответствует текущему количеству свободных потоков - не так ли? У меня сложилось впечатление, что свободные потоки будут висеть в ThreadPool и будут сокращены до минимума, если они не будут использоваться в течение некоторого времени.
Это важно, потому что, согласно документам:
Когда все потоки пула потоков назначены задачам, пул потоков не сразу начинает создавать новые свободные потоки. Чтобы избежать ненужного выделения стекового пространства для потоков, он создает новые незанятые потоки через определенные промежутки времени. Интервал в настоящее время составляет полсекунды, хотя он может измениться в будущих версиях .NET Framework.
Я хочу проверить, должно ли мое приложение создавать чрезмерное количество «новых» потоков в пуле - замедляя его - но я не уверен, как это сделать, не имея возможности выяснить, сколько простоя, готовые к повторному использованию темы, которые у меня есть.
Любые идеи приветствуются. Спасибо!