Модератор: Модераторы
Очень просто, используя sleep(2); в циклах при ожидании. Если не помогает, создаёте глобальную типизованную константу и вставляете в разные циклы процедуру увеличивающие её на единицу. Как только значение превысит критическое, то срабатывает sleep(2); и константа обнуляется.Вопрос такой: как уменьшить нагрузку, хотя бы ценой быстродействия?
Написал я под свои нужды программу, которая много считает (операции, в основном, над числами с плавающей точкой). Обнаружил, что в процессе работы она сильно нагружает процессор (в результате чего наблюдал зависания и вылеты иксов на двух компах невзирая на принудительное снижение приоритета путем запуска через nice). Вопрос такой: как уменьшить нагрузку, хотя бы ценой быстродействия?
Вот Sleep - это, кажется, работает. Я, правда, время задержки сделал управляемым - через параметры запуска и через менюшку. Ksysguard показывает ощутимую разгрузку.
А что, есть варианты?
repeat main.Pause; sleep(50); main.Resume; sleep(50); until false;
Для двухъядерника, впрочем, возможно (за счет перераспределения нагрузки между ядрами)
vada писал(а):Что нам говорит наука кибернетика?
-"Любую программу можно сократить хотя бы на одну команду".
-"Время выполнении любой программы можно сократить хотя бы на один такт".
Я бы копал в сторону вашего "тяжелого" алгоритма.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 59