последствия ядерной войны КРИС КАСПЕРСКИ АКА МЫЩЪХ Спецвыпуск: Хакер, номер #072, стр. 072-062-4 Если отбросить улучшения, касающееся многопроцессорных систем, Виста отличается от XP только уменьшенной фрагментацией кучи (the low-fragmentation heap - LFH), эвристическими алгоритмами, автоматически подстраивающимися под характер запроса на выделение памяти, и отложенной (lazy) инициализацией. Насчет фрагментации - откровенное вранье. Фрагментация кучи приводит отнюдь не к падению производительности, а к невозможности выделения непрерывного блока требуемых размеров, хотя по «кускам» свободной памяти может быть в сотни раз больше. Приложение просто отказывает в работе, показывая, какой лось его создатель. С нормальными программами такого не случается. У них другая проблема - утечки памяти. Ошибки проектирования приводят к тому, что выделенная однажды память не освобождается, образуя мощные «осадочные» пласты, наслаивающиеся друг на друга, вплоть до полного исчерпания всей свободной памяти. Завершается спектакль падением приложения. Справиться с утечками операционная система, к сожалению, не в силах, поскольку не существует никаких признаков, позволяющих отличить полезный блок от блока, который забыли освободить. Что же касается адаптивных алгоритмов, то всегда существует угроза, что они сработают с точностью до наоборот, и вместо обещанного выигрыша (составляющего от силы десятки процентов) получим грандиозное падение производительности. То же самое относится и к переписанному lookup-алгоритму (на котором базируются функции выделения и освобождения памяти), теперь его эффективность составляет не O(n), а O(1), то есть время поиска представляет собой константу, не зависящую ни от каких внешних факторов (например, количества выделенных блоков). Как это влияет на производительность? Представь, что у нас есть два ящика. Один черный, другой – прозрачный, и в нем лежит $100. Какой из ящиков содержит больше денег? Так же и здесь. O(n) - это линейная зависимость, представляющая собой наклонную кривую. O(1) - это прямая, параллельная оси X. В точке пересечения двух прямых (которая из условий задачи нам неизвестна) эффективность обоих алгоритмов совпадает, после чего алгоритм O(1) начинает давать все больший выигрыш, чем O(n). Но по левую сторону от точки пересечения все не так, - там выгоднее O(n). Но это в теории. На практике наибольшее влияние на производительность оказывает именно RTL, то есть библиотека времени исполнения, поставляемая вместе с компилятором. [менеджер ввода/вывода.] Большим шагом вперед стало появление приоритизированного ввода/вывода, при котором поток ввода/вывода с более высоким приоритетом вытесняет поток с более низким. Это, например, позволяет копировать большое количество файлов в фоновом режиме без потери производительности. Но так ли часто приходится рабочим станциям сталкиваться с подобной ситуацией? На серверах - да, там это очень полезно, даже если это «домашний» ftp, который теперь можно перевести в фоновой режим, чтобы при большом наплыве пользователей система не «проседала» под нагрузкой, открывая файлы со скоростью черепахи. |