С момента проведения конференции разработчиков для Palm OS в феврале этого (2004) года, в Сети разгорелось множество споров по поводу поддержки многозадачности операционной системой Palm OS Cobalt, в первую очередь, в сравнении с Windows Mobile (более известной как Pocket PC). На самом деле, это не вовсе не предмет для спора и в этой статье я хочу объяснить почему. Я хотел держаться подальше от всего этого. Слишком много времени и энергии я сжег на споры об операционных системах в прошлом (поищите слово Kirvin в конференции comp.sys.os2.advocacy в Google Groups чтобы понять, что я имею ввиду) и, как я написал в прошлом году в своей колонке под названием "Parity", спор "Palm OS против Windows Mobile" на самом деле стал разновидностью культового спора "Форд против Шевроле" (Ford vs Chevy). Как было сказано, существует серьезная путаница в понимании того, как в операционной системе Palm OS Cobalt (ранее известной как Palm OS 6) будет реализована многозадачность. По моему мнению, разработчики из PalmSource использовали один наиболее простых и элегантных способов для ее реализации, учитывающий достаточно ограниченные ресурсы карманных компьютеров. Я попытаюсь объяснить, как Cobalt будет обеспечивать работу нескольких приложений, работающих одновременно, и сравнить это с тем, как выполняет данную задачу Windows Mobile. Впрочем, все технические подробности я постараюсь свести к минимуму. Во-первых, давайте посмотрим на того, кто сегодня стоит у руля (прим. переводчика - имеется ввиду MS Windows, а не Джордж Буш). Windows Mobile делит доступную память на два сегмента: Хранилище (Storage) и Программы (Program). Хранилище похоже на ваш жесткий диск: туда по умолчанию система сохраняет данные и это то место, куда вы устанавливаете программы. Чем больше у вас программ и данных, тем меньше памяти Хранилища у вас остается. Оставшаяся часть памяти - память Программ. Она похоже на ОЗУ в вашем PC, там живут выполняющиеся программы. Когда вы запускаете программу на устройстве с Windows Mobile, программа копируется из Хранилища в память Программ и остается в обоих местах, пока вы или система не закроете ее. Таким образом, пока программа выполняется, она занимает в два раза больше места. Когда вы нажимаете на X в правом верхнем углу экрана устройства с Windows Mobile, Windows не закрывает приложение. Она лишь сворачивает его, оставляя программу работающей в фоновом режиме. Когда вы запускаете следующую программу, она также полностью копируется в память Программ. Чем больше приложений выполняется (все, кроме одной, свернуты, так как пользовательский интерфейс Windows Mobile не может показывать рядом два приложения как на настольном компьютере), тем меньше у вас остается памяти для программ. В Windows Mobile граница между Хранилищем и памятью Программ динамична и распределяется с помощью бегунка, который вы можете перемещать вперед и назад, на экране Память (Memory screen). Я обычно сдвигаю его как можно дальше влево, минимизируя количества памяти Хранилища, а затем устанавливаю приложения и сохраняю данные на карточку вместо внутренней памяти. Недостаток этого способа состоит в том, что документы, располагающиеся не во внутренней памяти устройства, не могут быть синхронизированы на PC с помощью Activesync. Несмотря на это, я делаю именно так, потому что Windows Mobile это Windows, и работает тем лучше, чем больше памяти программ вы ей дадите. Тем не менее, следует быть осторожным с бегунком; если вы передвинете его в каком-либо направлении слишком далеко, система автоматически вернет его назад на середину. Бегунок так же будет подстраиваться под нужды системы: если вы запустите много программ одновременно, система сама передвинет бегунок влево, предоставляя вам больше памяти Программ за счет Хранилища. Если у вас запущено достаточно много приложений, выполняющихся в фоновом режиме и не делающих ничего полезного, как можно от них избавиться? Официальный ответ - никак. Windows Mobile автоматически закроет те из них, которые ничего не делали слишком долго, когда у вас начнет заканчиваться память. По крайней мере, так должно быть в теории. На практике, система ждет слишком долго и вы начинает наблюдать, как быстродействие вашей системы "погружается в болото" задолго до того, как Windows начинает закрывать неактивные приложения. В результате существует процветающий рынок приложений, которые заменяют кнопку Windows "Умное Сворачивание" ("Smart Minimize") настоящей кнопкой закрытия, позволяющей реально прекратить работу приложения. Хотя способ выполнения приложений Windows Mobile работает достаточно хорошо, это далеко не единственный способ реализации многозадачности. PalmSource выбрала для Cobalt другой подход, который будет работать также хорошо, если не лучше. В Cobalt приложения написаны для работы в нескольких "нитях" (thread, поток выполнения). Это означает, что вместо одной большой программы у вас есть две или более мини-программы, работающие вместе, но до некоторой степени независимо. У музыкального проигрывателя будет одна нить для управления главным интерфейсным экраном, другая нить для того, чтобы фактически декодировать и проигрывать музыку и, возможно, третья для всплывающей мини-консоли управления в том случае, если вы вызываете плеер из стороннего приложения. У браузера будет одна нить для отображения веб-страничек, другая для подключения к Сети и скачивания страниц в локальный кэш. Фоновые нити этих приложений (процесс скачивания для браузера и декодирования/воспроизведения для музыкального проигрывателя) будут иметь меньший размер и работать эффективней, чем целое приложение. Давайте рассмотрим на примере, как этот механизм работает. Пусть я работаю с моим новеньким Tungsten T4 под управлением Cobalt. Я запускаю музыкальный проигрыватель, загружаю в нем несколько файлов в формате Ogg Vorbis, которые я хотел бы слушать фоновом режиме. Затем я нажимаю на Play, наживаю на Home и возвращаюсь в главное меню приложений. Нить интерфейса музыкального проигрывателя сразу же закончит свою работу, освобождая память и процессорное время. Тем не менее, нить воспроизведения будет продолжать работу, позволяя мне продолжать слушать музыку, несмотря на то, что с технической точки зрения музыкальный проигрыватель не запущен. Запускаем интернет-браузер и начинаем загружать большую страницу, перегруженную фреймами (например, флеймом на тему "Palm против Pocket PC"). Я загружаю ее через Bluetooth и телефонное соединение GPRS, грубо говоря, со скоростью обычного модема. Я не хочу ждать, поэтому я нажимаю и удерживаю иконку Home. Так как я недавно пользовался своим почтовым клиентом, его значок отобразиться в маленьком всплывающем списке приложений.В этот момент браузер на самом деле дольше не работает. Нить закачки все еще работает в фоне, вытягивая HTML и картинки и размещая их в кэше. Когда все будет сделано, нить сама завершится и уведомит менеджер внимания (attantion manager)о том, что закачка страницы завершена. Тем временем, запускаем почтовый клиент. Нажимаем кнопку посылки и приема сообщений, а затем Home и запускаем свой любимый текстовый процессор. Несмотря на то, что программа - почтовый клиент завершена, нить скачивания пыхтит в фоне, сохраняя мои письма в базу данных почтовой программы. Когда это будет сделано, она сообщит об этом менеджеру внимания. Итак, у меня сейчас два ожидающих сообщения, пока я работаю в текстовом процессоре. Я знаю об этом, поскольку значок Менеджера внимания (маленькая звездочка в прямоугольнике) мигает в верхнем правом углу экрана. Я могу игнорировать его сколько угодно, если я работаю над чем-то важным (большая часть этих строк читалась бы лучше, если бы они были написаны за один присест) и просто продолжаю набирать. Когда я хочу посмотреть, что еще происходит, я нажимаю на мигающую звездочку и вижу два ожидающих сообщения. Одно говорит мне о том, что в моем почтовом ящике пять новых писем, другое сообщает о том, что страница докачалась. Сначала я нажимаю на ссылку по поводу почты. Текстовый процессор завершает свою работу и почтовая программа опять запускается. Так как завершившаяся нить закачки уже сохранила сообщения в почтовую базу, они уже тут и готовы к чтению. Я читаю все пять, отвечаю на одно и опять нажимаю на кнопку "отправить/принять". В фоновой нити начинается посылка почты, а я тем временем нажимаю на значок менеджера внимания (который все еще мигает, так как я не открыл сообщение браузера) и пользуюсь им для того, чтобы направиться в браузер. Интерфейсная нить почтового клиента завершается, хотя посылка писем продолжается, а я уже опять в браузере, просматривая полностью скачанную страницу. Теперь, спросим себя, отличается ли чем-нибудь, с точки зрения пользователя, метод многозадачности Cobalt от того, что используется в Windows Mobile? На самом деле нет. В обеих системах пользователь может запускать несколько одновременно программ, которые будут выполняться в фоновом режиме, в то время как пользователь работ с каким либо одним приложением. Различие здесь только одно, и заключается оно в том, что метод Cobalt несколько более эффективен, что должно привести к лучшей общей производительности. Однако это не означает, что метод Cobalt обязательно лучше, просто он другой. Обратная сторона более эффективной многозадачности в том, что приложения должно быть специально написано для поддержки нескольких нитей. Приложения, написанные для Palm OS 5 (которая теперь называется Garnet) и более ранних версий вообще не смогут получить выгод от многозадачности. Лучшее, что они могут сделать - автоматически сохранить свое состояние на тот момент, когда из них вышли и запустили другое приложение. Так образом, вы можете запустить их еще раз и продолжить с того места, где вы закончили. В Windows Mobile, приложениям не надо делать ничего специального для поддержки многозадачности, так как этоделается самой Windows Mobile. Итак, какой путь лучше? Кто делает лучшие грузовики, Форд или Шевроле? Но как здесь нет верного ответа, так как возможности производимых обеими компаниями автомобилей очень сильно совпадают, так и нет большой разницы в мощности и гибкости в самых последних версиях Windows Mobile и Palm OS. Перевод http://www.palmq.ru URL этой статьи: http://www.palmq.ru/sections.php?op=viewarticle&artid=107 |