Насколько я понимаю, .NET CLR создает пул потоков для каждого процесса. Таким образом, каждый процесс имеет свой собственный пул потоков. И в каждом пуле потоков существует определенное количество доступных потоков. Он может быть увеличен или уменьшен по мере необходимости платформой, но он начинается с заранее определенного числа потоков для каждого процесса.
Я хотел узнать количество потоков, с которых оно начнется для простого приложения WPF. Когда я использовал System.Threading.ThreadPool.GetMaxThreads(out worker, out io)
и System.Threading.ThreadPool.GetAvailableThreads(out worker, out io)
, я получил один и тот же результат для 2047 рабочих потоков и 1000 потоков ввода-вывода. Но я предполагаю, что это не может быть правильным, так что это не правильный способ найти зарезервированные в настоящий момент потоки в пуле потоков.
Итак, я посмотрел на счетчик потоков с помощью диспетчера задач Windows, и он показал 10 потоков для приложения. Это казалось разумным, и я пришел к выводу, что в пуле потоков 9 потоков, поскольку один из 10 является основным потоком пользовательского интерфейса.
Прежде всего, мой вывод о 9 потоках в пуле потоков правильный? Во-вторых, как правильно запросить его с помощью c #?