У меня проблема с потоками,
Я устанавливаю ThreadPool.SetMaxThreads(maxThreads, System.Environment.ProcessorCount) на 10.
Но когда я проверяю, сколько доступно ThreadPool.GetAvailableThreads(), он говорит, что есть (maxThreads - 1), то есть 9, но затем продолжает использовать 10 потоков.
Есть идеи, почему это так?
Спасибо за помощь.
Я уже второй раз задаю этот вопрос, потому что вы решили закрыть другой. Это ДРУГАЯ проблема!
Я не знаю ответа на вопрос, но в чем «проблема», которую, по вашему мнению, это вызывает? Вам не следует связываться с этими числами ... если вы хотите регулируемый пул, вы должны написать свой собственный (или подождать, пока не появится .NET 4.0, поскольку CCR / TPL содержит такие ...).
Что потсер не упомянул, так это то, что они видят это поведение только при запуске в хост-процессе тестовой программы: stackoverflow.com/questions/320280/…
Я думаю, вы видите проблему там, где ее нет. Как заметил Марк, «не стоит связываться с этими числами»
@MeeMMeeM - моя основная схема питания обеспечивает возможность возиться с живым переменным током; это не делает это хорошей идеей ...





В идеальном мире у нас было бы 1 поток / физическое ядро. Таким образом, у нас больше не будет переключений контекста, которые являются довольно дорогостоящими операциями. Но пока у нас не будет процессоров с сотнями ядер, это будет непрактично.
В любом случае, как предложил Марк, вам не следует связываться с параметрами ThreadPool, если вы ДЕЙСТВИТЕЛЬНО не знаете, что делаете. Логика реализации ThreadPool .Net довольно хороша, и она может успешно обрабатывать большинство сценариев.
Вы ставите в очередь потоки с чем-то похожим?
ThreadPool.QueueUserWorkItem(callback, obj)
а затем сделать что-то вроде:
WaitHandle.WaitAll(WaitHandle)
Я предполагаю, что есть проблема с тем, как вы на самом деле подсчитываете запущенные потоки, но без более конкретного объяснения того, что вы делаете, это только предположение.
Один из потоков пула потоков отслеживает операции ожидания других потоков в пуле потоков. Это должно объяснить maxthreads - 1 результат.
Я не уверен, почему тогда используются все 10 потоков. Возможно, он использует 9 для вашей работы, 1 для мониторинга и постановки в очередь другого.
Это третий раз, когда вы задаете этот вопрос за последние 30 минут.