Об эффективности - с другой стороны
От: Pavel Dvorkin Россия  
Дата: 17.11.05 06:57
Оценка: 24 (4) +6 -4 :)
Решил еще раз вернуться к этому вопросу и посмотреть на него с несколько иной точки зрения.

Тема оптимизации, которую я инициировал, вызвала весьма бурную реакцию. Насколько я понимаю (судя по оценкам , многие со мной согласны, в то же время были высказаны соображения, которые я если и не принимаю полностью, то отмахнуться от них все же не могу.

Вернуться к вопросу меня побудило вот это сообщение IT. Впрочем, и до него аналогичные мнения высказывали и другие.

http://www.rsdn.ru/Forum/Message.aspx?mid=1482509&only=1
Автор: IT
Дата: 11.11.05


>Павел, знаешь в чём твоя ошибка? Особенно в терминах цели vs. средсва? Нет, ты не путаешь цели со средствами, ты просто навязываешь свои цели и приоритеты другим. Ну нет у меня задач, требующих молниеносного чтения данных из файла. А если появятся, то уж на блочном чтении дело не остановится. В дело пойдёт сначала кеширование, а потом и до map-файлов дойдёт. Но пока таких нет. И не только у меня, а у подавляющего большинства здесь присутствующих, т.к. времена, когда это было действительно насущей проблемой для масс давно прошли.


Оставив в покое молиеносное чтение из файла как частный случай, рассмотрим основной постулат :

>Но пока таких нет. И не только у меня, а у подавляющего большинства здесь присутствующих, т.к. времена, когда это было действительно насущей проблемой для масс давно прошли.

Не могу не признать правоты этого высказывания. Действительно, коль уж нет — то нет. А почему нет ?

Попробую высказать следующее утверждение

В последнее десятилетие рост мощности компьютеров (ограничусь только объемом RAM и скоростью процессора) был столь большим, что в результате мир IT оказался в редчайшей ситуации — возможности имеющейся техники для многих задач существенно превышают то, что необходимо для этих задач.

Попробую аргументировать.

Пусть, к примеру, создается сайт для небольшой торговой компании. Общее количество наименований продукции не более 1000. Положив по 100 Кбайт на каждый вид продукции, имеем 100 Мбайт информации, которой фирма оперирует. Из этого объема процентов 70-80 — просто файлы с документацией, доступные для скачивания, а остальное — база данных, HTML страницы и т.д. Никаких Java апплетов там не предвидится.

Кстати, 100 Мбайт — не так уж мало. 500-страничная книга — это примерно 1 Мб. Так что 100 Мб — это шкаф на сотню таких книг, что реально и имела бы фирма, если бы не было компьютеров вообще.

Обращений к этому сайту ожидается не так уж много. Сотни сеансов в день, вряд ли более.

И вот вам поручили сайт для этой фирмы сделать. Естественно, вы не запросите супер-сервер, сойдет любая современная машина в серверном (а то и не в серверном исполнении. Pentium IV, 3 GHz, 512 Mb. О сети я сегодня не говорю вообще.

А теперь зададим следующий вопрос. На каком минимально оборудовании можно было бы такой сайт создать ? Полностью игнорируем имеющееся ПО, все средства разработки и т.д. Какая машина это может потянуть ? Вот IBM PC XT — не потянет, как там ни оптимизируй, это ясно. А какая (минимально) потянет ?

Мой ответ — Pentium-100 32 Mb. Ну в крайнем случае раза в 2 лучше

Доказательство — 10 лет назад такие сайты были, если не у нас, то в США, и работали они на такой технике. И оперировали они тем же объемом информации, просто потому, что никакой принципиально новой информации у фирмы, торгующей ,к примеру, компьютерами, просто не появилось. Изменился ассортимент, вот и все.

А кстати, какой клиент это все потянет ? Netscape 3.0 на 16 Мб под Windows 95 потянет ? Тянул же он раньше...

Другой пример. Зашел я полгода назад в налоговую инспекцию. Бросил взгляд на экран компьютера, и сразу стало ясно, на чем их ПО написано — FoxPro для DOS ни с чем ни спутаешь, внешний вид уж больно характерный. Создано это ПО лет 10 назад, и до сих пор благополучно работает. Не знаю, какте там у них клиентские машины и сервер, но вряд ли что-то фантастическое. Да и зачем — в инспекции работает не более 100 человек, а каждый сотрудник 95% процентов времени работает с клиентами и бумагами, а не с компьютером. Сомневаюсь, что одновременно к этому серверу у них бывает больше 5 обращений когда бы то ни было.

Кстати, и в отделении Сбербанка у нас в Омске еще года 2 назад FoxPro DOS была. Сейчас, правда, уже нет.

Вот, кстати, немного арифметики

1983 Хороший компьютер — XT, 640 Кбайт, 4.7 MHz
1990. Компьютер 386 DX, 40MHz с 4 Мб — хороший компьютер.
2005 Приличный компьютер — Pentium IV, не менее 2 GHz, не менее 512 Mb

За первые 7 лет — рост менее чем в 10 раз
За вторые 15 лет — в 50-100 раз.

А сложность задач в 50 раз отнюдь не увеличилась. Для той торговой фирты, с которой я начал, она и не могла увеличиться в 50 раз — просто потому, что нет у нее задач такой сложности. И не предвидится.

Разумеется, я далек от мысли утверждать, что это для всех задач верно. Если, к примеру, игры взять — все мои построения немедленно рушатся. И можно еще много таких направлений назвать, которым и нынешних мощностей мало, и в 10 раз увеличь — все равно, скажут, что мало, и будут правы. И не для всех сайтов это, конечно, верно.

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

А если так, то и появилась возможность пренебречь эффективностью. Действительно, когда ресурсов у нас в 10-20 раз больше, чем требуется — зачем относиться к ним с экономией ? Если мы имеем в 10 раз больше ресурсов, чем требуется — можно позволить и 2-3 кратную потерю эффективности в той же .Net — все равно работать будет с хорошей скоростью и заказчика устроит. Тут мои оппоненты правы. В результате и появился тот самый подход, пренебрегающий эффективностью в пользу других приоритетов, о которых тут много писали.

Кстати, эта точка зрения хорошо объясняет тот факт, что ASP.NET пользуется приличной популярностью, а настольных .NET приложений очень мало. Сайт на ASP.NET работает обычно на отдельной машине, кроме него самого и средств управления там больше ничего и нет, вольготно и раздольно. Настольные же приложения работают там, где кроме них есть еще 10-20 конкурентов, поэтому то замедление, которое они бы привнесли, многим не понравится.

Позволю себе вольную аналогию. Сервер на ASP.NET — это новый русский, отгрохавший себе особняк на 20 комнат и не знающий, что теперь с ними делать. Раздолье полное, можно любые причуды реализовать. А настольное приложение проживает в обычной трехкомнатной квартире многоквартирного дома, и когда оно пытается у соседа кухню отхватить — домовладельцу это не очень нравится

Если мои соображения верны, то ИМХО возможны следующие варианты развития

1. Рост мощностей продолжится прежними темпами. В этом случае и для многих других задач станет возможным пренебречь эффективностью. Возможно, это коснется и настольных приложений. Похоже, авторы .Net именно на это и рассчитывают — система явно сделана "на вырост".
2. Рост мощностей замедлится. В этом случае для тех задач, для которых и ныненшняя мощность избыточна, все останется как сейчас. Но понемногу будут подтягиваться задачи, которые пока что или вообще не решаются (может быть, даже само их существование пока не осознано, так что их и не ставят), или же решаются с трудом, так как имеющиеся способы их решения вынуждены были ориентироваться на имеющиеся мощности (игры — классический пример). Доля этих задач будет возрастать, что приведет к возврату требований по эффективности написания кода.
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.