О Mac OSX - из России с любовью





Обзоры
Операционные системы: Почему медленна Mac OS X?
Статья эта была написана еще до выхода 10.1, но тем не менее, по моему мнению, актуальна и сейчас.

by Andrew Welch
el Presidente, Ambrosia Software, Inc.
перевод alexmak

В последнее время было достаточно много обсуждений скорости работы Mac OS X. Это, конечно, правда, что Mac OS X работает медленнее, чем Mac OS 9 на одной и той же машине, и существует множество причин для этого, некоторые из них я хотел бы немного прояснить. Но сначала - немного обо мне.
Я работаю в маленькой компании, которая называется Ambrosia Software, Inc; мы пишем разные утилиты и игры для Mac уже более десяти лет. Я также являюсь счастливым владельцем NeXT Cube, работающем под OpenStep, и оригинальной документации о разработке под NeXT (приблизительно с 1990). Для тех из вас, кто не знает, Mac OS X основана на операционной системе NeXT - OpenStep.
Я достаточно глубоко знаком с Mac OS с точки зрения программиста, слегка - с OpenStep, и в течение прошедших нескольких месяцев я тесно познакомился с API Mac OS X. Помимо других обязанностей - управления различными проектами, я работаю над переносом нашей утилиты фотографирования экрана SnapzPro под Mac OS X. Несмотря на то, что это достаточно трудный проект для портирования под Х из-за его интеграции на системном уровне, процесс идет неплохо.
В любом случае, подобно большинству людей, кто работает с OS X, я был немного встревожен скоростью работы этой новой операционной системы. Суть проблемы вот в чем - нету единственного стопора, который тормозит ее. Чтобы ускорить OS X, несметное количество мелких трюков и оптимизаций должно быть применено к каждому уровню операционной системы (особенно к механизму отлавливания событий в ней).
Процесс разработки программного обеспечения следующий - для начала вы пытаетесь заставить что-то заработать; и у вас получается, причем часто - достаточно быстро. Оптимизация всегда идет последней; и причина такая - изначально вы не можете те места, в которых возникают тормоза (бутылочные горлышка), пока программа не закончена, только тогда вы сможете сделать некоторые замеры (профилирование) чтобы определить, в чем же на самом деле проблема...
Apple прекрасно понимает, что скорость Mac OS X - это проблема. Стив Джобс во время выступления на WWDC 2001 (конференция разработчиков) заявил, что больше всего жалоб и нареканий в OS X вызывала именно ее скорость. Я думаю, что если Джобс делает подобное заявление публично, то под некоторыми задницами у программистов из Apple уже горит огонь, дабы они сделали все возможное, чтобы ускорить OS X.
Apple выпустила Mac OS X, потому что это нужно было для Apple, и для разработчиков как мы. Apple должна была сделать это для самой себя, потому что проекты без четкого "вот именно тогда и не позже" предела имеют тенденцию оставаться в вечной бете, и никогда не уходят в продажу (я был свидетелем многих проектов OpenSource, которые испытывали недостаток управления или сильных ведущих разработчиков). Apple должна была отправить Mac OS X в продажу и для разработчиков, чтобы дать нам четкий набор API и аудиторию, для которой писать наши приложения (говоря откровенно, заставить нас поднять наши задницы, и начать работать над приложениями для OS X).
Mac OS X 10.0.x - это релиз больше для Apple, и для разработчиков под эту платформу, нежели для конечных пользователей (таким образом обьясняется тот факт, что Mac OS X 10.0 называли "ОС для первопроходцев"); однако у конечных пользователей-"первопроходцев" есть преимущество - у них есть определенная власть. Те, кто стал первопроходцами OS X, смогут диктовать Apple и разработчикам, что является приемлемым в плане производительности OS X и ее набора функциональности.
Исходя из моего собственного опыта, я могу сказать, что простое портирование вашего приложения на новый набор API в Mac OS X (тоесть под Carbon) - этого не достаточно в плане получения продукта с приемлемым уровнем производительности. В одном из проектов, над которым мы работаем, код был просто спортирован под OS X, и скорость работы приложения не блестала.
После того как мы сделали некоторые замеры скорости (профилирование), оказалось, что существенный прирост скорости может быть получен в тех местах, где множество мелких запросов к средствам OS X (например, вызывая GetWindowPortBounds() вместо только доступа myPort-> portRect) значительно замедляло приложение. В результате вместо этого мы просто вызывали средства доступа один раз в начале нашей функции, и кэшировали результаты.
Теперь мы получили продукт, который выполняется на Mac OS X более-менее быстро. Пусть это и не такая скорость, как у той же программы под OS 9, но я и не ожидал, что так будет. OS X - операционная система вытесняющей многозадачности; вы просто не можете захватить себе полностью все ресурсы процессора, когда вы хотите делать что-либо ресурсоемкое. Кроме того, многие элементы, на которых зиждется OS X, просто не оптимизированы так, как в Mac OS 9.
На нас, разработчиках под Mac OS, сейчас лежит тяжелое бремя. Мало того, что мы должны изучить новые API, мы также должны изучить новые инструментальные средства и методы, чтобы выжать максимум из потенциала Mac OS X. Есть два подхода, которые вы можете избрать как разработчик: вы можете расстроиться, что многое изменилось, или же вы можете выбрать приключение, которым и является OS X - в ней есть много серьезных вещей, с которыми разбираться и разбираться; если же вы будете биться головой в стену, пытаясь делать что-то по-старому, вы просто не заметите этого.
Ожидайте того, что приложения, выполняющиеся на OS X, будут медленнее, чем те же приложения, выполняющиеся на OS 9 (за некоторыми редкими исключениями - производительность OpenGL намного лучше под Mac OS X, например). Есть две основных причины для этого:
- первая - OS X медленнее чем ОS 9, потому что это - система с вытесняющей многозадачностью, которая была написана чтобы работать в первую очередь, и не была оптимизирована, и поэтому использует намного больше памяти чем OS 9.
- Вторая причина - то, что приложения, выполняющиеся на OS X, тоже были написаны, чтобы сначала начать работать (разработчики под Mac OS только начинают писать приложения для новой ОС), и потому не были оптимизированы для OS X.
Я ожидаю увидеть изменение обеих причин, поскольку Apple совершенствует и оптимизирует Mac OS X, и разработчики изучают OS X и начинают делать то же самое - усовершенствование и оптимизацию своих приложений. Было множество странных слухов, якобы обьясняющих, кто же виноват в медленности Mac OS X; я хотел бы развеять некоторых из них.
Покупайте новое железо. Интернет пестрел слухами о том, что Apple не планирует оптимизировать OS X, потому что они хотят, чтобы вы покупали новые компьютеры, чтобы на них запускать OS X. Несмотря на то, что Apple - в первую очередь аппаратная компания, они также сознают, что они не могут позволить себе потерять ни одной из уже установленных систем - они пытаются заполучить клиентов, а не разбрасываться ими. В Apple сидят далеко не глупцы. Они также понимают, что, даже если вы покупаете новый компьютер, чтобы работать с OS X быстрее, когда OS X все еще неоптимизирована, то Windows XP и другие операционные системы смогут выполнять эти приложения лучше - и это стало бы большой проблемой для Apple.
Carbon против Cocoa. Carbon и Cocoa - два API, которые разработчики могут использовать, чтобы написать приложения для OS X. Cocoa основан на OpenStep API; Carbon основан на Mac OS API. Cocoa объектно-ориентирован, Carbon процедурный. Оба - и Carbon, и Cocoa построены поверх CoreServices - Вы можете написать приложение для Mac OS X, которое будет выполняться "не спеша", в любой среде - Carbon или Cocoa. точно также вы можете написать приложение для Mac OS X, которое будет "летать", в любой среде - Carbon или Cocoa; люди, рекламирующие один API или другой по причинам производительности - сами дезинформированы и дезинформируют вас..
Quartz. Quartz - абсолютно новая модель отображения 2-D графики в OS X; он позволяет делать впечатляющие вещи, но многие винят именно Quartz в "торможении" OS X. Несмотря на то, что действительно, если бы некоторые функции Quartz были акселлерированы в железе, это бы ускорило его, Quartz, фактически, и так достаточно быстр. Основываясь на некоторых тестах, которые я проводил, Quartz - не козел отпущения, которого ищут многие (хотя есть еще куда совершенствовать Quartz, и я ожидаю, что это будет сделано).
Mach и его система управления. Mach - ядро OS X; оно обрабатывает некоторые низкоуровневые вещи типа управления памятью, выделения процессорного времени, и т.д. Mach реально очень быстр; это в достаточной мере оптимизированное ядро. Система управления в текущей версии OS X позволяет задавать приоритет различным задачам, несмотря на попытки некоторых личностей убедить всех в обратном. Проблема на самом деле в том, что команды пользовательского уровня типа 'nice' (и другие) не работают должным образом, чтобы корректировать эту систему управления - программисты могут использовать Mach, чтобы корректировать приоритет задачи, и фактически это сделано в Quartz, чтобы гарантировать, что обновления экрана не будут происходить рывками.

Так что можно сделать, чтобы ускорить OS X? Сначала поставьте побольше оперативной памяти. OS X поглощает оперативную память, как будто завтра не наступит никогда; частично - потому, что каждое окно на экране имеет буфер памяти, так что создание нового окна отхватывает хороший кусок памяти. Например, окно, размером 800х600 пикселей в миллионах цветов поглощает 1.9MB оперативной памяти. Для единственного окна. И это не считая содержимого окна. Теперь посмотрите, сколько окон открыто у вас на машине (у меня приблизительно 90 (маньяк!!! -прим. переводчика)) и вы поймете, как система пожирает память.
Если система исчерпает оперативную память, OS X сбросит часть содержимого памяти на ваш диск; жесткие диски невероятно медлительны в сравнении с оперативной памятью, так что это основательно замедлит систему. Память сейчас дешева; я недавно купил дополнительно 512МБ за меньше чем 100 $. поставьте себе побольше оперативки, и вы будете рады, что вы это сделали.
Что вы еще можете сделать - напишите Apple, что вы рассматриваете скорость OS X как серьезную проблему. Если вы напишете аргументированно, Apple прислушается. Если Apple получит тысячи аргументированных писем, они обязательно прислушаются. Так что идите вот сюда и пишите: http://www.apple.com/macosx/feedback/
Также от вас не убудет, если вы напишете компаниям, программными продуктами которых вы пользуетесь, и сообщите им тоже самое: что вы рассматриваете производительность как важный фактор. Напишите им, что вас интересует не просто перенос программы под Mac OS X, но и оптимизация этих приложений. У вас есть для этого власть.
Скорость, действительно, единственное, что беспокоит меня в OS X. Я уже давно понял, что "легкость в использовании" относительно пользователя включает в себя отсутствие крешей и потери данных пользователя (что может быть более враждебно по отношению к пользователю?), и в этом плане Mac OS X обеспечивает это пользователю. Я всерьез полагаю, что Mac OS X проще для новичков и случайных пользователей в использовании, нежели Mac OS 8/9. Опытным пользователям понравится тот факт, что есть командная строка, если они действительно хотят этого. Если OS X может быть побыстрее, я думаю, что у Apple есть хороший шанс заполучения новых клиентов, нежели их потеря и переход к Windows. Надежда на скорость есть.


Это место зарезервировано для Вашей рекламы

С нетерпением ждем ваших обзоров и статей. Пишите!
Хостинг предоставлен Unsanity LLC
All rights reserved © Powermic, 2001.