Как ограничить использование процессора конкретным процессом? - PullRequest
2 голосов
/ 07 апреля 2011

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

Ответы [ 4 ]

2 голосов
/ 07 апреля 2011

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

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

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

2 голосов
/ 07 апреля 2011

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

1 голос
/ 07 апреля 2011

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

0 голосов
/ 07 апреля 2011

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

...