Сокращение использования процессора потоком или процессом - PullRequest
3 голосов
/ 20 марта 2012

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

Как я могу это сделать?

Редактировать: Я не могуповысить эффективность самого процесса, потому что я не контролирую его.Я внедряю свой код в игру, которую я хотел бы «автоматизировать» в фоновом режиме.

Ответы [ 4 ]

1 голос
/ 22 марта 2012

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

Лучше всего это можно сделать, повысив эффективность кода или вызвав его реже. Цель состоит в том, чтобы гарантировать, что процесс не будет постоянно расходовать весь свой доступный интервал времени.

Что попробовать:

  1. Определите, что на самом деле занимает весь процессор. Оптимизируйте тяжелые области обработки - в идеале с изменением алгоритма.
  2. Минимизируйте опрос везде, где это возможно.
  3. Старайтесь полагаться на способность операционной системы пробуждать ваш процесс при необходимости. например. Ожиданием файлов / сокетов / fifos / мьютексов / семафоров / очереди сообщений и т. Д.
  4. Имеют процессы, которые самостоятельно регулируют использование своих процессоров. Если ваш процесс выполняет большую работу в бесконечном цикле, вставляйте sched_yield () или sleep () после каждого N циклов. Если другие процессы не ожидают загрузки ЦП, ваш процесс будет перенесен практически сразу, но при необходимости остальная часть системы будет использовать время процессора.
  5. Перестройте обработку, чтобы позволить действиям с более низким приоритетом выполняться, когда ваш процесс находится в режиме ожидания.
  6. Тщательно отрегулируйте нить или приоритеты процесса. Но имейте в виду, как сказал @Mooing Duck, что, делая это, вы можете просто перенести использование ЦП с одного места на другое, не видя общего улучшения.
0 голосов
/ 20 марта 2012

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

0 голосов
/ 22 марта 2012

В итоге я перечислил список потоков, а затем установил таймер на 100 мс, который приостановил список потоков две из каждых пяти итераций (что теоретически снижает загрузку ЦП на 40%).

Спасибо за все ответы.

0 голосов
/ 20 марта 2012

Как насчет выдачи команды сна через равные промежутки времени?

...