LINUX.ORG.RU
ФорумAdmin

Народ, рассудите...


0

0

есть некий человек, написавший некую программу, которая выедает 99,8% процессора Celeron1300 мегагерц(256 RAM). Я этому человеку говорю, что такие процессы в системе запускать нельзя, а он мне в ответ говорит что любая программа в Юниксе выедает все мощности процессора. Причем, ничего особенно серьезного программа не делает, ни мощного расчета какой-то математики, вобщем ничего серьезного с точки зрения счета.

Есть вам не сложно, напишите несколько комментариев по поводу программ, которые выедают все ресурсы процессора... Я для него не пророк в своем отечестве. Он действительно специалист(доктор физ.мат. наук), но не в Юнихе, как мне кажется, хотя я тоже не супер. Зачем это пишу, чтобы потом послать ссылку на мнение комьюнити. Если и это не поможет, напишу письмо примерно того-же содержания Линусу Торвальсу, Алану Коху и разработчикам Сусе и Слаквари.

Спасибо за комментарии!

☆☆

>>любая программа в Юниксе
У меня все ресурсы подгребает только разраковка архивов и make на пару с cpp

fagot ★★★★★
()

Если такая программа всего одна, то запускать ее с nice 19 и какая на фиг разница, что idle task будет все процессорное время потреблять, что эта программа. А писать письма по этому поводу -- идиотизм. Особенно Торвальдсу. Ничего не ответит и будет прав. Только посмеется над идиотами из России.

anonymous
()

(В дополнение к предыдущему) Кстати, если это вычислительная программа, то она и должна потреблять ВСЕ процессорное время. Это ее нормальное поведение.

anonymous
()

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

я еще понимаю, когда сигнал приходит и система становится реалтайм, пусть будет nice -20, я на это согласен... но нафиг 99,8% процессора жрать 99% времени вхолостую!!

vilfred ☆☆
() автор топика

"Кстати, если это вычислительная программа" - она становится вычислительной тогда, когда начинает работать по внешнему вызову.

Ясно, разговор беспредметный, нужно конкретно знать, что происходит. Real-time это здорово, но какой смысл в реалтайме, если при выключенной программе контроллеры обеспечивают работоспособность шаговиков...

Не знаю, ответит ли он, скорее всего врядли, задачу конечно надо знать... но уверенности нет в работе системы...

vilfred ☆☆
() автор топика

"Вычислительная", я имею в виду как клиент seti@home, которому всегда есть, что посчитать в свободное время (и про которого никто не знает, что же, на самом деле, он считает, потому что он получает из интернет не только данные, но и код). А нулевой процесс(ы) по сути просто пустой цикл. И так же "насилует процессор" как и любая другая задача. Кстати, я могу назвать несколько системных процессов (вроде apmd) которые всегда потребляют все процессорные ресурсы. И это тоже нормальное поведение, потому что такой процесс (если он есть) по определению только один и работает вместо idle task, только еще и включает режим пониженного энергопотребления на портативных компьютерах. Так что, по идее, ничего страшного в процессе, который всегда готов исполняться нет. Другое дело, что процесс, который постоянно опрашивает внешние устройста, скорее всего криво написан (хотя я несколько раз встречал устройства которые не используют прерывания в принципе и по другому их обслуживать просто нельзя). Помню, в старых BIOS (оооочень старых), которые я дизассемблировал, IDE драйвер работал опрашивая порты. Без прерываний. Это обеспечивало чуть более высокую производительность.

anonymous
()

Когда тот мужик отвернется, вставь в код программы sleep миллисекунд эдак на 10, где-нибудь в цикле. И все дела.

ansky ★★★★★
()

А я как-то писал программулинку для проверки проца и памяти, вот она-то съедает 100% проца, если конечно поместится в памяти.
int main()
{
int size=15e6;
int *arr1=NULL;
int *arr2=NULL;
int i;
arr1 = malloc(size*sizeof(int));
if(!arr1) exit(1);
arr2 = malloc(size*sizeof(int));
if(!arr2) exit(2);
for(i=0;i<size;i++)
{
arr1[i]=random();
arr2[i]=random();
}
while(1)
{
for(i=0;i<size;i++)
{
arr1[i]=(arr1[i]+arr2[i]+arr2[size-i-1])/3;
arr2[i]=(arr2[i]+arr1[i]+arr1[size-i-1])/3;
}
}
free(arr1);
free(arr2);
return 0;
}

Gelin
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.