Как ограничить использование процессора конкретным процессом?

#c #windows #process #cpu

#c #Windows #процесс #процессор

Вопрос:

Как я могу ограничить загрузку процессора до 10%, например, для конкретного процесса в Windows C ?

Комментарии:

1. просто один из новых 10-ядерных процессоров и напишите процесс однопоточным … ;-P

2. Одновременно запустите что-нибудь другое, использующее Flash или Silverlight — это гарантированно откажет всем другим процессам более чем в 10% процессора. 😉

Ответ №1:

Вы могли бы использовать Sleep(x) — замедлит выполнение вашей программы, но это освободит циклы процессора
, где x — время в миллисекундах

Комментарии:

1. 1 Хотя я испытываю отвращение к Sleep, это, вероятно, лучшее, что вы можете сделать, поскольку это действительно сокращает время процессора (хотя и очень неконтролируемым образом). SwitchToThread может быть альтернативой.

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

Ответ №2:

Это редко требуется, и, возможно, приоритеты потоков являются лучшим решением, но поскольку вы спросили, вам следует:

  1. выполняйте небольшую часть вашей «солидной» работы, то есть вычислений
  2. измерьте, сколько времени занял шаг 1), скажем, это twork миллисекунды
  3. Sleep() в течение (100/percent - 1)*twork миллисекунд, где percent ваша желаемая нагрузка
  4. вернитесь к 1.

Чтобы это работало хорошо, вы должны быть очень осторожны при выборе размера «доли» вычисления, а некоторые задачи трудно разделить. Одна доля должна занимать где-то от 40 до 250 миллисекунд или около того, если это займет меньше, накладные расходы на переход в спящий режим и измерение могут стать значительными, если больше, иллюзия использования 10% ЦП исчезнет, и будет казаться, что ваш поток колеблется между 0 и 100% ЦП (что и происходит в любом случае, но если вы делаете это достаточно быстро, то кажется, что вы берете только какой-то процент). Следует отметить две дополнительные вещи: во-первых, как упоминалось ранее, это на уровне потока, а не на уровне процесса; во-вторых, ваша работа должна быть реальной работой процессора, ввод-вывод с диска / устройства / сети обычно требует много времени ожидания и не требует столько процессора.

Комментарии:

1. Мне нужно установить ограничение процессора не для моего процесса, поэтому я могу установить ограничение в этом процессе, к сожалению ((

2. ну, то, что вы хотите, просто невозможно

Ответ №3:

Это работа ОС, вы не можете ее контролировать.

Ответ №4:

Вы не можете ограничить его ровно 10%, но вы можете уменьшить его приоритет и ограничить использование только одного ядра процессора.

Комментарии:

1. Будьте осторожны с приоритетами, это совсем не будет делать то, что вы думаете. Поток с более низким приоритетом все равно будет использовать 100% ЦП, если поток с более высоким приоритетом не «готов». Однако, пока любой поток с более высоким приоритетом «готов», он вообще не будет выполняться.