Потоки в C#, GetAvailableThreads ()

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

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

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

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

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

Это третий раз, когда вы задаете этот вопрос за последние 30 минут.

Mitch Wheat 26.11.2008 15:06

Я уже второй раз задаю этот вопрос, потому что вы решили закрыть другой. Это ДРУГАЯ проблема!

Mat 26.11.2008 15:21

Я не знаю ответа на вопрос, но в чем «проблема», которую, по вашему мнению, это вызывает? Вам не следует связываться с этими числами ... если вы хотите регулируемый пул, вы должны написать свой собственный (или подождать, пока не появится .NET 4.0, поскольку CCR / TPL содержит такие ...).

Marc Gravell 26.11.2008 15:12

Что потсер не упомянул, так это то, что они видят это поведение только при запуске в хост-процессе тестовой программы: stackoverflow.com/questions/320280/…

Mitch Wheat 26.11.2008 15:15

Я думаю, вы видите проблему там, где ее нет. Как заметил Марк, «не стоит связываться с этими числами»

Mitch Wheat 26.11.2008 15:21

@MeeMMeeM - моя основная схема питания обеспечивает возможность возиться с живым переменным током; это не делает это хорошей идеей ...

Marc Gravell 26.11.2008 15:42
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
1 679
3

Ответы 3

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

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

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

ThreadPool.QueueUserWorkItem(callback, obj)

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

WaitHandle.WaitAll(WaitHandle)

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

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

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

Другие вопросы по теме