Максимальное количество потоков на процессор
В настоящее время я использую тестер нагрузки Visual Studio Test Suite для имитации загрузки наших веб-приложений на другом сервере. (Нет, я не тестирую против производства). Я считаю, что это создает поток для моделируемого пользователя.
Пока я делал это, у меня был синий экран, который, возможно, не был связан.
Но это подняло вопрос.
Сколько потоков я могу использовать до того, как мой процессор не сможет обработать столько запросов?
Технические характеристики:
Процессор Intel Core 2 Duo T7700 @ 2,40 ГГц 2,40 ГГц (32 бита)
Есть ли какая-либо другая информация или контекст, которые я должен предоставить?
3 ответа
Это зависит от версии.NET, которую вы используете. Вы можете 250 рабочих потоков для процессора на.NET 3.5.
Проверьте эту статью MSDN.
Вы можете отслеживать эти счетчики производительности во время выполнения этого теста. Это даст вам представление о том, каковы ваши практические ограничения при увеличении параллелизма:
- Система \ "Длина очереди процессора".
Длина очереди процессора - это количество потоков в очереди процессора. В отличие от дисковых счетчиков, этот счетчик счетчиков, этот счетчик показывает только готовые потоки, а не потоки, которые работают. Существует одна очередь для процессорного времени даже на компьютерах с несколькими процессорами. Следовательно, если на компьютере установлено несколько процессоров, вам необходимо разделить это значение на число процессоров, обслуживающих рабочую нагрузку. Устойчивая очередь процессора менее чем на 10 потоков на процессор обычно является приемлемой, в зависимости от рабочей нагрузки.
Это похоже на среднюю загрузку Unix в том смысле, что оно указывает потоки, ожидающие выполнения. Это не то же самое, что% загрузки ЦП, который только говорит вам, сколько времени потрачено на работу против холостого хода.
- Система \ "Переключение контекста / сек".
Переключение контекста / с - это комбинированная скорость, с которой все процессоры на компьютере переключаются с одного потока на другой. Переключение контекста происходит, когда работающий поток добровольно освобождает процессор, вытесняется готовым потоком с более высоким приоритетом или переключается между режимом пользователя и привилегированным (ядром) режимом для использования службы Executive или подсистемы. Это сумма Thread\Context Switches/sec для всех потоков, запущенных на всех процессорах компьютера, и измеряется количеством коммутаторов. В объектах System и Thread есть счетчики переключения контекста. Этот счетчик отображает разницу между значениями, наблюдаемыми в двух последних выборках, деленную на длительность интервала выборки.
Это число относится к каждой системе. Но с некоторым сравнительным тестированием вы можете использовать этот счетчик для сопоставления с верхними пределами вашей вычислительной мощности.
Некоторые ограничивающие факторы для рассмотрения:
- Время, потраченное на переключение контекста между потоками, может перевесить пользу от наличия нескольких потоков. Как правило, если ваши потоки не тратят много времени на ожидание, преимущество большего количества потоков на ядро - это снижение производительности, а не улучшение производительности - см. Следующий пункт:
- Есть ли смысл иметь более одного потока? Если каждый поток не тратит много времени на ожидание чего-либо - если у вас есть одно ядро - тогда вы можете сделать только одну вещь одновременно. Бросать больше ниток на это не поможет. Для 2 ядер 2 потока...
- Возможно исчерпание стековой памяти - операционная система больше не может отслеживать все ваши потоки.