#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), скажем, это
twork
миллисекунды Sleep()
в течение(100/percent - 1)*twork
миллисекунд, гдеpercent
ваша желаемая нагрузка- вернитесь к 1.
Чтобы это работало хорошо, вы должны быть очень осторожны при выборе размера «доли» вычисления, а некоторые задачи трудно разделить. Одна доля должна занимать где-то от 40 до 250 миллисекунд или около того, если это займет меньше, накладные расходы на переход в спящий режим и измерение могут стать значительными, если больше, иллюзия использования 10% ЦП исчезнет, и будет казаться, что ваш поток колеблется между 0 и 100% ЦП (что и происходит в любом случае, но если вы делаете это достаточно быстро, то кажется, что вы берете только какой-то процент). Следует отметить две дополнительные вещи: во-первых, как упоминалось ранее, это на уровне потока, а не на уровне процесса; во-вторых, ваша работа должна быть реальной работой процессора, ввод-вывод с диска / устройства / сети обычно требует много времени ожидания и не требует столько процессора.
Комментарии:
1. Мне нужно установить ограничение процессора не для моего процесса, поэтому я могу установить ограничение в этом процессе, к сожалению ((
2. ну, то, что вы хотите, просто невозможно
Ответ №3:
Это работа ОС, вы не можете ее контролировать.
Ответ №4:
Вы не можете ограничить его ровно 10%, но вы можете уменьшить его приоритет и ограничить использование только одного ядра процессора.
Комментарии:
1. Будьте осторожны с приоритетами, это совсем не будет делать то, что вы думаете. Поток с более низким приоритетом все равно будет использовать 100% ЦП, если поток с более высоким приоритетом не «готов». Однако, пока любой поток с более высоким приоритетом «готов», он вообще не будет выполняться.