Pull to refresh

ZOMG! Эта программа загружает процессор на 100% !!1!

Reading time 3 min
Views 21K
Original author: Raymond Chen
Непонятно, почему люди относятся к программам, загружающим процессор на 100%, так, как будто эти программы без конца пинают беззащитных маленьких щенят. Им кажется, что столбец в Диспетчере задач — это счётчик: сколько щенят в секунду пинает программа.

Успокойтесь. Если программа загружает процессор на 100% и ничего при этом не делает, то, пожалуй, её можно отнести к бесстыдным пинателям щенят. Но если программа работает, и использует все 100% для своей работы, — то её, наоборот, стоит похвалить за эффективную работу!

Представьте себе: пусть нагрузка вашего процессора никогда не превышала бы 50%. Выходит, вы используете компьютер лишь наполовину; не значит ли это, что вы просто переплатили за него двойную цену? Задача, которая выполнилась бы за пять минут при полной загрузке, выполняется у вас за десять минут; но зато драгоценный индикатор загрузки никогда не переходит воображаемую «красную черту». (Обратите внимание: в Windows на этом индикаторе нет никакой красной черты.)

Например, один программист спрашивал, как изменить программу, чтобы она меньше загружала процессор, но при этом выполняла работу «за разумное время». Чего ради уменьшать загрузку? Почему вместо того, чтобы закончить работу как можно быстрее, — программа должна беспокоиться о циферках в Диспетчере задач?

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

«Когда конец кончал бы все, — как просто! Все кончить сразу!»

Если вы уже вывели процессор из энергосберегающего режима, используйте его по-полной, иначе это всё равно, что купить бутылку воды, выпить половину, и половину выбросить, «чтобы сэкономить мировой запас пресной воды». Если вы «экономите» загрузку процессора, и выполнение вашей задачи занимает двукратное время, — значит, вы удваиваете заодно и расход энергии.

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

Либо, если ваша задача «обычная», и вы хотите, чтоб она выполнялась одновременно с другими «обычными» задачами, — оставьте ей обычный приоритет. Теперь она время от времени будет отбирать процессор у других задач — только таким образом задачи смогут выполняться одновременно. Если вы хотите, чтоб ваша задача чаще возвращала процессор остальным, перемежайте свой код вызовами Sleep(0). Если в системе есть другие задачи, ожидающие, пока процессор освободится, — управление перейдёт к ним; а если таких задач нет, то после вызова Sleep сразу же продолжит выполняться ваша.

Во всех этих случаях использование процессора будет оставаться 100%, пока ваша задача не выполнится. И это отлично. Позаботьтесь лишь о том, чтобы после завершения задачи загрузка вернулась к 0%. Продолжать использовать 100% даже тогда, когда программа уже ничего не делает, — это всё равно, что пинать щенят.

Комментарий 1: похожим образом неверно истолковываются и другие счётчики, например, счётчик используемой памяти. Если в системе используется только половина памяти от имеющегося объёма — значит, вы вдвое переплатили за память. Используйте её всю! Какой смысл экономить после того, как вы её уже купили?

Комментарий 2: неотзывчивость системы никак не связана с программами, загружающими процессор. Такие программы полностью используют всё то время, что ОС им предоставляет, и не более того. Они вовсе не «захватывают» компьютер, отнимая его у остальных программ.
Если ОС «несправедливо» распределяет процессорное время между программами, то это её проблемы, а не проблема программ, задействующих все выделенные им ресурсы. Либо, что чаще, дело в неправильно выставленных приоритетах процессов.
Tags:
Hubs:
+14
Comments 119
Comments Comments 119

Articles