По каким-то причинам люди относятся к программам, занимающих процессор на 100%, как если бы эти программы пинали ногами беззащитных (и милых) щеночков. Успокойтесь же. А то у меня уже такое впечатление, что люди считают, что столбец "Использование CPU" в Диспетчере Задач - это не диагностический инструмент, а способ подсчета, сколько щенков в секунду пинают ногами программы.
Хотя программа, которая потребляет 100% процессора всё время (даже во время простоя) может законно рассматриваться на роль пинателя щеночков, но программа, которая занимает процессор на 100% ради достижения конкретной цели навряд-ли заслуживает ваших жалоб; в самом деле, вам нужно наградить её за усилия!
Подумайте об этом с такой стороны: представьте, что ваш процессор никогда не загружается выше 50%. Что это значит? А то, что вы напрасно его купили, потратив кучу денег: ведь половина его всегда простаивает. Задача, которая могла быть выполнена за пять минут, теперь выполняется за десять. Ваш медиа-проигрыватель выбрасывает из просмотра DVD кадры - но это нормально, ведь полоска загрузки вашего ценного процессора никогда не достигает вершины. Заметьте, что когда загрузка CPU достигает 80% и выше, она не становится красной (как это происходит для диска) - здесь нет никакой "опасной зоны".
Примите это во внимание, когда кто-то говорит вам, что хочет, чтобы их программа использовала меньше процессорного времени, но при этом они хотят выполнять работу вовремя/быстро. Ну и зачем же тогда они хотят использовать меньше процессора? Их высказывание подразумевает неявное предположение, что менее интенсивное использование процессора важнее, чем выполнение самой работы.
Пусть у вас толпа народу в банке и только десять приёмных окошек. Если вы позволите всем людям в холле подойти ко всем окошкам одновременно, то все десять окон будут заняты обработкой клиентов и у вас будет 100% загрузка. Но некоторым людям, видимо, кажется, что будет лучше, если вы выгоните часть людей на улицу, чтобы они ждали там, пока вы будете запускать внутрь только по пять человек за раз, чтобы держать загрузку окошек на 50%.
(прим.пер.: следующие несколько строк намеренно оставлены без перевода; похоже, что при переводе в них останется не так много смысла)
If it were done when 'tis done, then 'twere well / It were done quickly.
Rip off the band-aid.
Piss or get off the pot.
Just do it.
Если вы собираетесь пойти на то, чтобы пробудить процессор от сна - ну так и используйте его на полную. Иначе вы будете похожи на человека, который покупает бутылку воды, выпивает половину, а вторую выкидывает: "потому что я забочусь об окружении, уменьшая мою потребность в воде". Вы увеличиваете потребление энергии с батареи, уменьшая время автономной работы, потому что машина теперь работает в полном режиме в два раза дольше, из-за того, что вы пытаетесь "сэкономить" на процессоре.
Если задача, которую вы пытаетесь выполнить, не очень важна, то просто поставьте вашему потоку приоритет пониже (например, below normal) - так что ваша программа будет использовать процессор только, если нет обычной программы, которой нужен процессор.
Если же вы хотите, чтобы ваша задача работала даже если у вас есть активные программы - то оставьте приоритет на среднем уровне без изменений. Да, это означает, что ваша программа будет конкурировать с остальными программами за процессор, но вы же только что сказали, что это то, чего вы хотите. Если вы хотите работать, "но не очень усердно", вы можете вставить в ваш код несколько вызовов
Sleep(0)
, чтобы преждевременно отдать ваш квант времени до его обычного истечения, если в системе есть работающие программы. Sleep(0)
работает просто: если в момент вызова функции на процессор претендует ещё кто-то - вы отдаёте ваш квант ему. Нет - тогда функция просто вернёт управление, ничего не сделав, а ваша задача продолжит выполнение на полной скорости.И радостно смотрите, как загрузка процессора поднимается до 100%, пока работает ваша задача. Просто убедитесь, что она возвращается в ноль, когда вы закончите. Вы бы не хотели иметь задачу, которая пожирает 100% времени процессора, когда ей нечего делать. Это было бы просто пинание щеночков.
ZOMG - тотже OMG только с опечаткой ) http://answers.yahoo.com/question/index?qid=20100218191558AAfIEdF
ОтветитьУдалить