Назад | Перейти на главную страницу

Максимальное количество потоков на процессор

В настоящее время я использую нагрузочный тестер Visual Studio Test Suite для имитации нагрузки наших веб-приложений на другом сервере. (Нет, я не тестирую на производстве). Я считаю, что он создает поток для моделируемого пользователя.

Пока я делал это, я увидел синий экран, который, возможно, не связан с этим.

Но тут возник вопрос.

Сколько потоков я могу использовать, прежде чем мой процессор не сможет обработать ГЕНЕРАЦИЮ такого количества запросов?

Технические характеристики:

Intel Core 2 Duo CPU T7700 @ 2,40 ГГц 2,40 ГГц (32 бит)

Есть ли другая информация или контекст, которые мне нужно предоставить?

Это зависит от версии .NET, которую вы используете. Вы можете 250 рабочих потоков для процессора на .NET 3.5.

Проверять, выписываться этот Статья MSDN.

Вы можете отслеживать эти счетчики производительности во время выполнения этого теста. Это даст вам представление о ваших практических ограничениях по мере увеличения параллелизма:

  • Система \ "Длина очереди процессора".

Длина очереди процессора - это количество потоков в очереди процессора. В отличие от счетчиков диска, этот счетчик счетчиков показывает только готовые потоки, а не запущенные потоки. Даже на компьютерах с несколькими процессорами существует единая очередь для процессорного времени. Следовательно, если компьютер имеет несколько процессоров, вам необходимо разделить это значение на количество процессоров, обслуживающих рабочую нагрузку. Постоянная очередь процессора из менее чем 10 потоков на процессор обычно приемлема, в зависимости от рабочей нагрузки.

Это похоже на среднюю загрузку Unix, поскольку указывает потоки, ожидающие выполнения. Это не то же самое, что процент использования ЦП, который только показывает, сколько времени вы тратите на работу по сравнению с простоями.

  • Система \ "переключений контекста / сек".

Переключений контекста в секунду - это комбинированная скорость, с которой все процессоры на компьютере переключаются с одного потока на другой. Переключение контекста происходит, когда запущенный поток добровольно отказывается от процессора, вытесняется готовым потоком с более высоким приоритетом или переключается между пользовательским режимом и привилегированным (ядром) режимом для использования исполнительной или подсистемной службы. Это сумма потоков \ переключений контекста в секунду для всех потоков, работающих на всех процессорах компьютера, и измеряется в количестве переключений. Есть счетчики переключения контекста для объектов System и Thread. Этот счетчик отображает разницу между значениями, наблюдаемыми в двух последних выборках, деленную на продолжительность интервала выборки.

Это число относится к каждой системе. Но при некотором тестировании вы можете использовать этот счетчик для сопоставления с верхними пределами вашей вычислительной мощности.

Некоторые ограничивающие факторы, которые следует учитывать:

  1. Время, затрачиваемое на переключение контекста между потоками, может перевесить выгоду от наличия нескольких потоков. Как правило, если ваши потоки не тратят много времени на ожидание, преимущество большего количества потоков на ядро ​​заключается в ухудшении, а не улучшении производительности - см. Следующий пункт:
  2. Есть ли смысл иметь более одного потока? Если каждый поток не тратит много времени на ожидание чего-либо - если у вас есть одно ядро ​​- тогда вы можете делать только одну вещь одновременно. Добавление большего количества обсуждений в него не поможет. На 2 ядра 2 потока ...
  3. Возможна нехватка памяти стека, поскольку операционная система больше не может отслеживать все ваши потоки.