воскресенье, 15 февраля 2009 г.

Так чем же плохи апплеты?

Это перевод So why are applets so bad, anyway? Автор: Ларри Остерман.

А на это есть простой ответ. И я дал его в самом первом посте этой серии: "это мой компьютер, козёл". Простой ответ заключается в том, что апплеты тратят ваши ресурсы вместо того, чтобы эти ресурсы использовались вами.

Как абсолютный минимум, каждый процесс апплета занимает процесс (да ты что, кто-бы мог подумать! - да, Ларри, это было весьма глупое заявление). Но при этом нужно не забывать, что каждый процесс в Windows тратит значительное количество системных ресурсов - вы можете видеть это в Диспетчере Задач Vista.

Нас интересуют три колонки (подряд перечислены имя колонки в оригинальном посте, в русской Виста, в русской XP и в Process Explorer):
1. Оригинал: "Working Set".
Vista: "Память - рабочий набор" (отображается как просто "Память")
XP: "Память - использование" (отображается как просто "Память")
ProcExpl: "Working Set"
2. Оригинал: "Commit Size"
Vista: "Память - выделенная память"
XP: "Виртуальная память"
ProcExpl: "Private Bytes"
3. Оригинал: "Memory"
Vista: "Память - частный рабочий набор"
XP: нет
ProcExpl: "WS Private"
4. Оригинал: нет
Vista: нет
XP: нет
ProcExpl: "Virtual Size"

2 - это количество памяти, зарезервированной для процесса (поэтому это число может быть невероятно большим). 1 - это количество физической памяти отданной процессу, а 3 - это часть 1, не занятая DLL-ми.

Примечание переводчика: видимо, Ларри перепутал 2 с 4 (а может быть это я неверно перевёл его слова). Именно колонка 4 показывает общую виртуальную память процесса (т.е. занятое адресное пространство процесса: выделенную + зарезервированную память). Колонка 2 показывает именно выделенную память - это та часть 4, для которой была действительно выделена какая-то память (не важно, где она находится - в RAM или в файле подкачки). Впрочем, в этих колонках немудрено запутаться (вы только посмотрите на разнобой названий для 2! А ведь я ещё не приводил названий колонок в английском Task Manager-е). Кстати, колонка 3 показывает ту часть колонки 2, которая находится в оперативной памяти. Колонка 1 показывает всю оперативную память, занимаемую процессом - но при этом часть этой же памяти разделяется несколькими процессами (ах, как же любят начинающие программисты искать утечки ресурсов по этому значению! А всё потому, что эта колонка единственная видимая по-умолчанию в Диспетчере Задач). Для желающий поглубже разобраться во всей этой мешанине я рекомендую серию Марка Руссиновича: часть 1, часть 2.

На моей машине я взял два запущенных апплета, у них оказалось:

FlashUtil9d.exe занимает 4.5 Мб по колонке 1, 1.3 Мб по колонке 2 и 760 Кб по колонке 3.
FwcMgmt.exe (файрвольный клиент ISA) занимает 4 Мб по колонке 1, 1.6 Мб по колонке 2 и 300 Кб по колонке 3.

Эти 700 + 300 Кб - это та настоящая, физическая память, которая активно используется процессом (иначе она оказалась бы выгруженной на диск). Это и есть ненужная нагрузка на память, возникающая из-за запуска апплета. При нескольких запущенных апплетах это число начинает БЫСТРО расти. На современных мощных машинах это не проблема, но для машин с меньшим объёмом памяти это может быть критично.

Примечание переводчика: у меня сейчас на машине крутится один мусорный процесс, который добавляет 3.5 Мб (по колонке 3).

В моём предыдущем посте я разделил все апплеты по 4-м категориям (обновлялки, обработчики области уведомлений, вспмогательные процессы и службы). В дополнение к общим проблемам, указанным выше, каждая категория имеет индивидуальные проблемы.

Обновлялки часто работают всё время, несмотря на то, что они делают свою работу только раз в день (или даже раз в месяц). Это означает, что они всё время тратят ресурсы зря. А самое худшее, что, например, на моей домашней машине у меня находится обновлялка, которая требует элевации с помощью манифеста (что означает, что у меня всплывает диалог о повышении прав каждый раз, когда она запускается).

Обработчики области уведомлений также работают всё время, что ещё хуже - они засоряют область уведомлений бесполезными иконками. Чем больше иконок в области уведомления - тем менее полезной она становится. Вообще-то именно это стало причиной для появления "большой четвёрки" в Vista (*) - люди часто жаловались на то, что иконки от программ сторонних производителей мешают находить нужные иконки. В дополнение к этому, обработчики уведомлению любят показывать всякие балуны, отвлекая пользователя. А также, поскольку все они запускаются при старте системы, то они замедляют загрузку.

Вспомогательные процессы не имеют каких-либо индивидуальных проблем - они просто потребляют ресурсы при работе.

Службы одновременно и хороши и плохи. Каждая служба Windows имеет тип запуска, определяющий, что система должна делать с ней при старте. Это свойство имеет три значимых для служб значения: AutoStart, DemandStart и Disabled. Когда служба помечена как AutoStart, она запускается автоматически при каждом запуске системы. Кроме того, поскольку службы работают в высоко-привилегированных учётных записях, их разработчикам нужно быть очень внимательными, чтобы не привнести в систему дыр безопасности. До Vista, высоко-привилегированные службы были не прочь показать пользовательский интерфейс на рабочем столе пользователя - эта практика настолько опасна, что категория связанных с нею угроз получила своё собственное название: "shatter attacks". В Vista были сделаны изменения для предотвращения классических shatter-атак для всех последующих версий ОС, так что, к счастью, эта угроза осталась в прошлом.



Завтра: как вы можете минимизировать ущерб от апплетов?

Примечания переводчика:
(*) "Большая четвёрка" (звук, сеть, батарея ноутбука и часы) в Vista вынесена на отдельную область справа от обычного системного трея, поэтому её иконки всегда чётко отделимы от остальных.

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку (поддерживается OpenID).

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.