C # Threading, GetAvailableThreads () - PullRequest
1 голос
/ 26 ноября 2008

У меня проблема с потоками,

Я устанавливаю ThreadPool.SetMaxThreads(maxThreads, System.Environment.ProcessorCount) на 10.

Но когда я проверяю, сколько доступно ThreadPool.GetAvailableThreads(), он говорит, что есть (maxThreads - 1), поэтому 9, но затем продолжает использовать 10 потоков.

Есть идеи, почему это так?

Спасибо за помощь.

Ответы [ 3 ]

1 голос
/ 26 ноября 2008

Вы в очереди с чем-то похожим?

ThreadPool.QueueUserWorkItem(callback, obj)

и затем делает что-то вроде:

WaitHandle.WaitAll(WaitHandle)

Я предполагаю, что есть проблема с тем, как вы на самом деле подсчитываете запущенные потоки, но без более конкретного объяснения того, что вы делаете, это только предположение.

1 голос
/ 26 ноября 2008

В идеальном мире у нас было бы 1 поток / физическое ядро. Таким образом, у нас больше не будет переключателей контекста, которые являются довольно дорогостоящими операциями. Но пока у нас не появятся процессоры с сотнями ядер, это не будет практичным.

В любом случае, как предложил Марк, вам не следует связываться с параметрами ThreadPool, если вы ДЕЙСТВИТЕЛЬНО не знаете, что делаете. Логика, лежащая в основе реализации .Net ThreadPool, довольно хороша, и она может успешно справляться с большинством сценариев.

0 голосов
/ 27 ноября 2008

Один из потоков пула контролирует операции ожидания других потоков в пуле потоков. Это должно объяснить maxthreads - 1 результат.

Я не уверен, почему бы тогда использовать все 10 потоков. Возможно, он использует 9 для вашей работы, 1 для мониторинга и очередей для другого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...