Как стать автором
Обновить

Комментарии 119

Да все верно, в Windows нет иного способа проанализировать активность программы. Поэтому порой приходится обращать внимание на косвенные признаки зависание, как слишком долгое использование 100% загрузки процессора и утечки памяти.
А что вы имеете в виду когда говорите «Windows нет иного способа проанализировать активность программы».
Не дописал :(
Есть куча инструментов как для разработчиков, так и для сисадминов.
Да есть много хороших инструментов от того же Руссиновича, но даже по ним нельзя однозначно сказать выполняет ли программа сейчас какое-то полезное действие или же просто зациклилась. Если речь идет о 1С то да, можно посмотреть файл/нетмоном, отфильтровать по процессу/примерно неоходимым службам. Но если программа допустим КАД, как узнать что с ней? Толи много полигонов на себя взяла толи еще что, программа для pdf, толи битый файл отрыть не может толи внутренний сценарий завис?
Каков универсальный рецепт?
Это невозможно. Универсальный рецепт не существует, т.к. есть halting problem. Хотя компьютер и не является машиной Тьюринга из-за конечного числа состояний, но компьютер среднестатистического пользователя вряд ли справится с этой задачей.
Об этом я и написал свои первым комментом.
Нельзя точно определить, но косвенно можно как-раз по загрузке процессора и памяти.
извините, компьютер не является МТ из-за конечной ленты (внешней памяти), а не из-за конечного числа состояний
Бесят даже не цифири в диспетчере задач, а то, что отнюдь не каждое приложение умеет грамотно выставлять свой приоритет, и даже не дает сделать это среднестатистическому пользователю, как, например, ВинРар при создании архива. А лезть в диспетчер, искать нужный процесс, и выставлять ему приоритет, далеко не каждый умеет, среднестатистический пользователь-то)
Спасибо кэп. Да только где ты видел чтоб кто-то в здравом уме жаловался на загрузку проца?
На загрузку процессора жалобы не часто встретишь, а вот стонами «у меня семёрка гигабайт памяти отжирает» все форумы засраны…
если при этом не видно что она делает то почему бы не задать вопрос? чем с точки зрения пользлователя принципиально отличается ничего не делающая хр от ничего не делающей висты?
Она страницы переписывает ;)
Тему кэширования в висте не обсирал только ленивый, вы до сих пор не поняли что отображает счетчик памяти в висте и чем он отличается в хр?
я ленивый, не обсирал, перешел сразу на семерку и в чем отличия в счетчике памяти не интересовался. Если весь сыр бор от того что счетчик что то подругому стал считать и это смущает людей то на мой взгляд проблема в счетчике где недостаточно четко отображено что он отображает. Есть такое мнение что если ученый не может «на пальцах» объяснить свою теорию обычному человеку то значит он сам её недостаточно понимает.
НЛО прилетело и опубликовало эту надпись здесь
У меня — никогда. А вы не перепутали с svcnost.exe?
Пример с бутылкой воды не совсем корректный. Если сравнивать компьютерную систему, то если вы выпьете всю бутылку, то что останется жене, детям и другим несчастным родственникам?
С точки зрения среднестатистического пользователя, раздражает не просто «100%» в диспетчере. Дело в том, что если хочется выполнить процесс на фоне (например, запаковать файлы, и при этом фильм посмотреть), а он «берет в свои руки мощь процессора» и не дает нормально выполняться остальным — вот это действительно плохо.

Далеко не все пользователи запускают одну программу и согласны просто ждать результаты ее работы, как бы хорошо она не справлялась, и как бы сильно не грузила проц.
Такое можно решить только установкой приоритетов процессам и только в ручном режиме, если, конечно, речь не идет про заведомо фоновые задачи.
В нормальны OS это решается динамическим распределением приоритетов.
Как «нормальная ОС» принимает решение о том, что в данный момент юзер заинтересован в том, чтобы
— просматриваемый фильм не залипал, а не в том, чтобы фоновая архивация завершилась на 2 минуты быстрее?
— как можно быстрее заархивировать проект, чтобы записать его на флешку и не опоздать на работу, а фоновый Folding@Home (например) можно в это время вообще не кормить?
Я привел не самый удачный пример с Folding@Home, ибо он изначально запускается с минимальным приоритетом. Это может быть например прожорливая флешка в параллельно открытом браузере, я думаю суть вопроса так или иначе понятна.
это вполне реально. Можно в планировщике учитывать, какое окно сейчас активно. По крайней мере для графических ОС не самый плохой вариант, где-то слышал, что такое уже применяется.
В Windows это применяется, насколько я знаю, с самых первых Windows NT, где приоритеты только появились.
Эмс. Вообще-то это какое-то у вас суровое перефразирование изначального вопроса о 'и фильм посмотреть, и архив запаковать'. Про фильм и архиватор — всё просто, потому что у приложений разные сценарии активности, и в планировщике это всё учитывается. Ну… Если нужны подробности, можно почитать искходники Linux. Но в общих чертах: если приложение использует и использует процессор, изредка проводя операции ввода вывода (это сценарий для архиватора), то ему приоритет понижают. Если же вычислений не так уж и много и они часто завершаются обращением к IO, то приоритет повышается, как интерактивной задаче.

Опять же это всё и с Folding@Home сработает, потому что ещё реже ломится к ресурсам IO, чем архиватор. Но с F@H, конечно, история должна быть другой, потому что должна быть возможность его вообще останавливать при присутствии других задач. Тут уже нужно приоритет указывать.

Но с проигрывателям/архиваторами/терминалами/браузерами/флэшем нормальные планировщики давно уже справляются. Не знаю, как в Windows, но в Linux — всё ОК. Постоянно делаю по N дел одновременно, никаких проблем не возникает. Никогда ещё не приходилось вручную выставлять приоритеты.
При просмотре флэша на фулл скрине у меня ачсто возникает желание поиграться с приоритетами, хоть глянут помогут ли они. Но быстрее убить эклипс, опенофис и делюг — тормоза заканчиваются.
Справедливости ради, если бы заведовал десятью клерками, возможно, одного оставлял бы свободным на случай внезапного визита очень важного клиента.
И клерки бы еще платили за право быть таким VIP-клерком!)
Ну уж если сравнивать с банком, то стоит так распределять клиентов, чтобы не более половины клерков были заняты. А если клиентов будет больше, чем клерков, то начнется недовольство и столпотворение, что помешает остальным работать (не клеркам)
Чеестно использовать 100% процессора может лишь не слишком большой класс вычислительных алгоритмов, например, какие-нибудь числодробилки на матрицах. Большинство же программ используют обращения к диску, сети, экрану, и как правило эти ресурсы становятся узким местом, из-за которых процессор будет временами простаивать, ожидая завершения операций ввода-вывода. Так что если такие «обычные» программы загрузили на 100% — в них что-то не так.
100% загрузки проца — благо с точки зрения хагрузки машинного времени. Но не забываем об отзывчивости системы на это время. Все таки люди не хотят видеть N времени чёрный ящик.
Продолжая сравнение с клерками — если бы в ожидания заведующего входило то, что при необходимости найдется клерк который разгребет банально входящие от юриков, или что-то подобное. Ан нет, в офисе толпа и все заняты. Другое (что-то, возможно более приоритетное) стоит — ибо другие в очередь прошли первыми и заняли 100% ресурсов.

Конечно — в чём то это вина архитектуры — ОС. Но — нужно под неё подстраиваться. Мы с своих программах хотя бы в состоянии 100% загрузки асинхроним интерфейс и даём возможность задать приоритет расчетов и их интенсивность. аналогично — запаузить и зарезюмить в любое время.
2008\r2\Vista\7 отлично отзываются при 100% загрузке. Проверено по рдп на сервере бекапов, который жал поток 720р в h264 и паковал бекапы в LZMA.
Наконецто сделали выгружаемыми все мудули и само ядро операционной системы.
Что значит «наконец то»? Если Вы о pageable — так они с самого начала (за небольшими исключениями, включающими пути для pagein страниц обратно в память) были pageable. Если Вы о preemptable — так они с самого начала были preemptable (с небольшой поправкой: преемптятся не модули и не ядро, а потоки). Отключается скедьюлинг на процессоре не в момент перехода в ядро (как некогда у некоторых :-) ), а или явным образом — по запросу (KeRaiseIrql до DPC_LEVEL и выше) или неявным — для обработки прерывания (опять таки повышается IRQL). Более того, если хватает стека (у гуевых потоков хватает надолго) — можно делать многократный вход в ядро, вход (не возврат, а именно повторный вход в другом месте) в юзермод, опять ядро и так пока не закончится стек.
Если бы компьютер покупался только ради выполнения одной программы, то да всё вышесказанное верно. Но в реальности программы, загружающие процессор на 100% сильно мешают работе.

Допустим, программа загрузила систему на 100%. В ожидании результатов у меня не получится открыть ни браузер ни диспетчер задач, для смены приоритета программы.
Поставьте диспетчеру задач приоритет Time Critical, не закрывайте его и будет вам счастье :)

Еще можно поставить что-нибудь вроде этого:

Установите вот это:

soft.oszone.net/program/572/Process_Killer/

Будучи запущенным эта программка появляется при нажатии волшебной комбинации Ctrl+Shift+Ё и позволяет убить/приостановить/поменять приоритет любому процессу включая системные.

Сам Process Killer имеет приоритет Time Critical, поэтому работает практически во всех ситуациях.

Кроме того, можно понизить приоритеты CPU и IO по умолчанию для некоторых приложений.
Следующий .reg файл установит на минимум приоритеты для cl.exe (это c++ компилятор, цель — избавиться от диких тормозов пока оно компилирует; на скорость собственно компиляции это практически не влияет (если не запускать параллельно с ней чего-нибудь тяжелого), а вот отзывчивость системы при, скажем, серфинге интернета увеличивается в разы).

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\cl.exe\PerfOptions]
"CpuPriorityClass"=dword:00000001
"IoPriority"=dword:00000001
У меня на примере есть две программы, которые иногда приходится перезагружать:
1. Dreamveawer из CS5, который иногда приходится перезагружать, который просто на ровном месте начинает занимать полностью одно из ядер процессора.
2. Приходится перезагружать Firefox, потребление памяти которого может доходить до 350МБ и дело даже не потребляемой памяти, потому что именно к этому моменту программа начинает медленнее отзываться на команды, особенно сказывается на JS. Причину вижу в установленных плагинах, которые мне нужны для работы.
В обоих случаях приходится приходится мириться с этим.
350 мегабайт. Счастливый вы человек!
Попробуйте BarTab.
FF переоткрываю раз в пару недель, гигабайт из RAM — мой рекорд =)
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
я дома на 64битной протестирую =)
350 это ещё нормально, мне приходится раза 2 в рабочий день перегружать firefox с 1-2 вкладками открытыми, когда запущен firebug. Часто по полтора гига кушает
Ну и пусть кушает.
и всё висеть начинает
дааа. файрбаг — это просто дырища
НЛО прилетело и опубликовало эту надпись здесь
Что-то вы какие то страшные вещи рассказываете. У меня аж мурашки по коже пробежали.
Служба WSUS на сервере более 2Гб не забирает, а прожорлливее процесса я до этого в жизни не видел. :)
Если в ходе активного браузинга обычно вкладки открываются десятками, то да, на сложных страницах отъедает и за 3ГБ. Пришлось даже для браузера докупать дополнительные планки памяти. В принципе не только к хрому относится.
НЛО прилетело и опубликовало эту надпись здесь
иногда программа настолько загружает процессор, что даже перестает реагировать на кнопку «Отмена»… Единственный выход порой в этой ситуации — перезагрузить компьютер и удалить «глючную» программу
Убить процесс в task manager не судьба? :) Или у Вас одноядерник?
не знаю как у вас а у меня не то что task manager, весь комп перестает реагировать
Может стоить обновить комп? :)
Ну, можно еще отрывать руки разработчикам, которые выполняют длительные опреации (вычислительные или ввода-вывода) в потоке, в котором крутится GUI.
горбатого могила только исправит
С другой стороны, если вычисляющий поток замечает нажатие «отмены» минут через 10, в нем тоже мало пользы.
Ну, тут уже программист допустил ошибку в механизме синхронизации потоков, в любом случае, и то, и другое — ошибка программиста, за которую иногда хочется руки поотрывать.
Согласен. Я просто к тому, что отдельный поток — не панацея. Можно и с ним накосячить. А можно и в основном написать так, что все будет работать как надо.
больше всего огорчает что так вот накосячат а потом кричат на весь хабр что их программа грузит комп на все 100 и это хорошо
НЛО прилетело и опубликовало эту надпись здесь
Жалуются когда либо процессор (память, диск, сеть, ...) загружается явно чем-то не тем, что от программы требуется (т. к. аналоги для тех же задач процессор/память/… так не загружают), либо когда ОС/разработчики не угадали какой должен быть приоритет у программы (что вообще сложновато), а пользователю удобного способа управления приоритетом не предоставили.
Жалуются когда либо процессор (память, диск, сеть, ...) загружается явно чем-то не тем, что от программы требуется (т. к. аналоги для тех же задач процессор/память/… так не загружают), либо когда ОС/разработчики не угадали какой должен быть приоритет у программы (что вообще сложновато), а пользователю удобного способа управления приоритетом не предоставили.
Упс… что-то сглюкнуло…
у меня amd три ядра, два ядра полностью и частично видеокарта занимаются вычислениями, а на третьем можно фильм посмотреть.
еще есть такой момент что при полной нагрузке проц начинает греться и может начать пропускать такты чтобы остудиться.
У меня почему-то получается так, что чем больше оперативки занято, тем безбожнее всё тормозит. При этом процессор может быть не загруженным полностью, хотя при начале тормозов комп начинает и кулер ускорять и процессор напрягать. А толку чуть. Когда я запускаю браузер на 21% оперативки и 60%, то разница ощутима. И пусть даже все остальные программы свёрнуты и процессор особо не потребляют.

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

Был тут ряд статей об эффективном управлении памяти в Windows 7, так я этого не заметил. По сравнению с Убунтой, субъективно, последняя эффективнее, хотя отжирает при сходных нагрузках (десяток открытых документов, 20-25 вкладок браузера Хромиум, музычка, Скайп, IDE, свистопердёж аэро-компизов-гаджетов) на 30% больше оперативки, чем Win7. Последняя сбрасывает по полтора гига в подкачку и отзывчивость падает, тогда как на Убунте под своп выдал 500 мегов, а она от них отъела 400 килобайт. И работает намного шустрее
При отключке свопа на винде эта сволочуга забивает оперативку на 85%, лагает, работает рывками, перегревается, а в конце выкидывает бсод.

Приходится гиперактивную работу переносить в Убунту, а на Винду оставлять игрульки, где можно отрывать головы, чтоб разрядиться %)

Конечно, может быть всё дело, что в редакциях Pro и Максимальная есть какие-то особые фишки, но у меня Дом. Расширенная, хотя все эти Superfetch и Prefetch запущены.

Ноут старый, 2008 года, Винда даёт общую оценку 5,3, но как-то это незаметно. Оперативы 2 гига, проц двухъядерный 2,26 Ггц, видюха нвидия гф 9600 мджити.

Спасает комбинация программ Memory Improve Master и TuneUp Utilities.
Если бы я заведовал банком, в котором работают десять клерков, и туда ломилась бы толпа бездомных, чтобы положить на счет один цент, а потом его снять — естественно я бы их не пустил.
«При простое Windows Vista загрузка процессора держится около 40%. Значит эта система постоянно выполняет серьёзную работу на благо пользователя.» (с) какой-то-тролль-со-СЛОРа
Почему же тролль? Система при простое запускает довольно много фоновых задач. Не все сразу, конечно. Насчет висты не знаю, а в семерке можно посмотреть их расписание в планировщике.

К примеру, в фоне при простое постоянно происходит дефрагментация. Такого компонента в висте даже нет, его вручную не запустить. В семерке его все же вернули, но автозапуск при простое оставили.
А ещё индексация. Она работает постоянно, а профита для себя я не нашёл.
както чаще обратная ситуация, проц свободен. памяти еще есть — а все тормозииит.
даже не знаешь чегоб доставить чтоб не тупило
жесткие диски в райде, ссд, рамдрайв?
Опередили Вы меня :)
дык ноут, рейд проблематично
сейчас стоит ssd+hdd
Может быть SSD?
Уже
эммм…

Может Вы просто слишком быстро думаете? ;)
>>Когда конец кончал бы все, — как просто! Все кончить сразу!

долго втыкал во фразу из хабраката, но так и не понял, что хотел сказать автор)
В конце концов среди концов найдем конец мы наконец
Судя по контексту — что чем раньше завершится программа, тем лучше.
НЛО прилетело и опубликовало эту надпись здесь
Про приоритет написано выше в том же абзаце.
НЛО прилетело и опубликовало эту надпись здесь
The system assigns time slices in a round-robin fashion to all threads with the highest priority. If none of these threads are ready to run, the system assigns time slices in a round-robin fashion to all threads with the next highest priority.

msdn.microsoft.com/en-us/library/ms685100%28VS.85%29.aspx
НЛО прилетело и опубликовало эту надпись здесь
Можете привести ссылку, что в Windows механизм приоритетов реализован именно так?
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Спасибо, гляну.

Обратите внимание: по этому объяснению, длина квантов постоянна: нет «укороченных» квантов для низкоприоритетных потоков, как в объяснении выше.

Также обратите внимание, что это не способ запустить поток так, чтобы он выполнялся одновременно с остальными, но меньше остальных. Если до потока доходит управление раз в 4 с, это не так уж отличается от полного простоя.
НЛО прилетело и опубликовало эту надпись здесь
Так в результате поток будет выполняться меньше и получит времени меньше, чем потоки с более высоким приоритетом, а насколько меньше, как раз определяется приоритетом.

Как это определяется приоритетом?
Судя по приведённому объяснению, поток будет получать 4 кванта раз в 4 секунды, независимо от своего изначального приоритета.
НЛО прилетело и опубликовало эту надпись здесь
Да, да! Меня расстраивает, что видеоконвертеры черезвычайно долго работают, при этом нагрузка процессора очень даже небольшая! (например, pocketDivx)
А меня бесят флеш-баннеры которые умудряются грузить CPU на 50-100% и порой даже ронять браузер ) Это как, обидные пинатели щенят или безобидные?
Обидные. Блокируйте их нафиг и не мучайтесь.
Про память не совсем верно — свободная память не простаивает а используется для кеша, что сильно помогает в производительности. И памяти чуть больше чем надо я покупаю именно ради кеша.
Пример про клерков неудачен. Более хороший:

В зале 10 клерков банка и еще по 10 клерков других разных фирм. Так вот если банковские клиенты забьют весь зал, закрывая доступ народу к другим фирмам — это разве будет хорошо?
Нет же. Если есть другие программы, ожидающие выполнения, то процессор у первой программы ОС будет забирать сама.
Я нарочно добавил «комментарий 2», потому что многим безосновательно кажется, что программа со 100% загрузкой будет «отбирать» процессор у прочих программ.
Если бы вы заведовали банком, в котором работают десять клерков, и туда ломилась бы толпа посетителей, — вы бы впустили их, чтобы все десять клерков работали, или оставили бы посетителей ждать в очереди, чтобы загружать клерков не более чем наполовину?

Далеко ходить за примерами не надо. Центральный офис банка «Восточный Экспресс». В офисе — 4 работника, но реально с клиентами работает только один экономист. Три клерка ковыряются в носу(мы не консультируем, мы не можем и т.д...). И глубоку по… ф… гу.., что очередь выстраивается в 10 человек.
я как управляющий:
1) сначала бы прикинул сколько у меня клиентов в месяц
2) сколько нужно в среднем времени на «обслужить одного»
3) взял на работу длинноногую секретаршу, умеющую обращатся с календарём, и ручкой;
одна, да ещё с ТАКИМИ (!) ногами очередь быстро успокоит, и запишет всех на приём
4) выгнал 6 из десяти клерков, т.к. хватило и четверых…
5) начал думать куда потратить сыкономленные на ремонте дверей и ЗП клерков деньги
6) позвонил другу-пиаршику с просьбой опубликовать «требуются клерки! Срочно!»
7) в Отпуск! Рождество на носу!
Я бы не стал «хвалить» программу, которая загружает 100% ресурсов процессора, даже если она это делает «по делу» (прошу прощения за тафтологию :) ).
Иначе бы в разработке не имели бы такого значения действия, направленные на повышение производительности софта.
Повышение производительности никак не связано с загрузкой процессора.
Выбор стоит между «пять секунд нагружать на 100%» и «десять секунд нагружать на 50%».
Оптимизированная программа будет, к примеру, четыре секунды нагружать на те же самые 100%.
>Но если программа работает, и использует все 100% для своей работы, — то её, наоборот, стоит похвалить за эффективную работу!

это зависит от того, что именно делает программа. Условно можно выделить программы, для которых целевой показатель — общее время выполнения (архиваторы, кодировщики, рендеры, компиляторы и т.п.). Для таких 100% загрузки только в плюс, а если еще и несколько ядер, так вообще отлично.
Но есть другие программы, которые обрабатывают вполне определенное количество информации в единицу времени. Это могут быть плееры, некоторые игрушки, качалки и прочее. И вот если такая программа ставит раком процессор, тогда как аналогичная софтина отъедает например 50% с тем же конечным результатом, то разработчикам первой софтины следует вырвать руки с корнем.

>Если в системе используется только половина памяти от имеющегося объёма — значит, вы вдвое переплатили за память.
тут тоже есть момент, под что именно память используется. Если именно программами, то лучше докупить еще планку и оставить часть под кеш.

В общем-то вещи вполне очевидные, но хабр и так превращается в личный бложик Кэпа.
Весь жизненный опыт говорит об обратном. Если процесс антивируса захватил 99% (не 100!) процессорного времени — всё, капец, хром становится похож на IE6 по скорости работы, Full HD тормозит, Джава выходит из свопа аки королева Португалии на официальный приём в тронный зал, итд итп. Главная беда — у меня нет прав (и нет логических оснований, к тому же) укокошить процесс антивируса. Спасибо ему за заботу, конечно, но компьютер я покупал не для него, а для себя. И особенно весело: я не желаю позволять ему таким образом использовать «полную мощность моего компьютера», ибо идёт звонок в Скайпе, либо крутится давно ожидаемый фильм, либо программистская мысль стрельнула в висок и угрожает покинуть меня с секунды на секунду, если вот прям щас, прям немедленно не реализовать это в коде. Не пошел бы этот антивирус? Ребятам точно надо изобрести контроль процессорного времени для их приложения.

То же самое: Explorer 100% CPU, погуглите. Если бы это не вызывало тормозов системы, это не было бы популярнейшей темой форумов про Windows XP. Ну подумаешь, компьютер работает на полную мощность, чего бы нет то?

Так что проблема в том, что 100% процессора использует либо не то приложение, либо не в тот момент. Прибавьте к этому очевидное повышение энергозатрат у владельцев мобильной техники.
О чём это? Зачем это?
Что, нарисовали флеш баннер который жрет 100% проца и не знаете как оправдать?
Я честно не понял к чему это на хабре и кто вас так достал, хотя и знать не хочу.
Мечтаю когда After Effects научится использовать процессор на 100%
Например, один программист спрашивал, как изменить программу, чтобы она меньше загружала процессор, но при этом выполняла работу «за разумное время». Чего ради уменьшать загрузку? Почему вместо того, чтобы закончить работу как можно быстрее, — программа должна беспокоиться о циферках в Диспетчере задач?

Они не из эдоби флеш случайно?
Windows вообще-то многозадачная система, и если какой-то плейер или браузер вдруг стал отжирать 100% проца, то это проблема. Вообще очень мало типов задач, которые должны отьедать 100%.
Любая задача, которая выполняет действия, длящиеся более доли секунды — должна по возможности ипользовать во время этих действий 100% доступных ресурсов, ЦП, ОЗУ и т.д.
<sarcasm>Мда ? у меня в списке задач два десятка, крутящихся днями 
и что будет если каждый отъест 100% ?</sarcasm>
Ничего собственно не будет, потому что так и должно быть, каждый процесс использует 100% доступных ему ресурсов, а ОС благодаря различным приоритетам определяет сколько же ресурсов будет доступно.
Не вижу проблемы тут.
Гы, проблема в том что увеличиться контекст процесса и переключение начнет занимать приличное время и ресурсы. В результате не несущие полезной нагрузки задачи будут отъедать существенную часть ресурсов и в целом эффективность использования оных будет существенно меньше.
А что вы понимаете под контекстом? Из за большой загрузки ЦП или времени работы вообще переключение не может стать дольше, да и из за расхода ОЗУ тоже. Переключение долгим будет только если остальные программы вытеснило в swap, и может быть эффект замедления из за того, что кеш из ОЗУ вытеснился. Не вижу проблемы ни в теории, ни на практике.
Контекст при явном вытеснении существенно больше чем при системном вызове.
А на практике посмотрите как себя ведет длинный цикл с и без какого нить sleep(0)

Вообще, в практике, задачи, монопольно хапающие себе ресурсы, скидываются в low priority.
Ещё раз — что вы подразумеваете под контекстом процесса?
Ерунда какая-то. В очень многих случаях 100% (или 50% на двухпроцессорных) жрёт программа, которой это вовсе не надо или котрая подвисла.
Иногда это ошибка программирования, иногда программист просто не думает о других. «Детский» пример — это использование цикла for в качестве элемента задержки.

Например, часто попадалась версия Quake2, которая под виндами в режиме выделенного сервера жрала один проц полностью, а под другими осями — не жрала. Оказалось что в виндовой версии почему-то не было вызова sleep между фреймами (насколько я помню). При вставлении — стало жрать менее 10%, а работать не хуже.
Понятно что многим процессора не жалко, но это лишний расход электроэнергии и нагрев.

В тех случаях, когда программе действительно надо — архиватор, например, или что-то в этом духе, тогда да, ладно.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории