Подходы к многозадачности на WP7, Android и iOS
Подходы к многозадачности на WP7, Android и iOS

Многозадачность – это хорошо, однако у этого термина несколько значений и способов реализации. Недавно стало известно, что апдейт Mango привнесёт в Windows Phone 7 многозадачность, но реализована она совсем не так, как на Windows Mobile в 2000-2010 годах. Там многозадачность была была практически такой же, как на обычных ПК. Запущенное приложение оставалось в памяти, при выполнении задачи оно расходовало столько времени ЦПУ, сколько ему хотелось, невзирая на то, что ЦПУ может не хватить какому-либо другому, более важному приложению.


В Windows Mobile реализация многозадачности была призвана упростить работу, пользователь мог управлять приложениями и ресурсами. Если приложения какое-то время не используются, а системе требуется память, она выгружает их, освобождая ресурсы для других приложений. К сожалению, иногда процесс освобождения требует больше ресурсов, чем доступно в системе, в этом случае телефон подвисал на несколько секунд или зависал полностью.

Android, разработанный в 2003 и купленный Google в 2005 году, реализует многозадачность способом, схожим с Windows Mobile, но чуть более сложным: Android использует ряд правил, определяющих степень важности каждого процесса и выгружает их в соответствии с этим. Кроме того, Android поддерживает особые фоновые сервисы, которые могут работать всё время. Если системе хватает памяти, Android не выгружает ни одно приложение, все они могут работать сколько угодно долго.

Теперь, что касается реализации многозадачности на iOS. Изначально многозадачности там не было. Производительность была очень высокой, ведь в распоряжении единственного запущенного приложения находилось всё ЦПУ и вся память. Конечно, в этом случае работа фоновых приложений осложнена. Apple реализовал в iOS 4 новый способ многозадачности. Приложения, которым требуется постоянная работа, могут зарегистрироваться в системе и работать в одном потоке до тех пор, пока их не выключат. В этих потоках могут работать только приложения аудио/видео, геолокации и IP-телефонии. При нажатии кнопки «Домой» все приложения iOS 4 уходят в режим временной остановки. Работать приостановленное таким образом приложение начнёт только когда вы вернётесь к нему. В этом режиме приложения не используют процессор, но занимают память. iOS, при потребности в памяти, выгружает из памяти приостановленные приложения в обратном порядке времени обращения к ним. Конечно, некоторые встроенные приложения на WP7 могут работать в режиме многозадачности, как в ранних версиях iOS. Преимуществами этого метода являются экономия батареи и высокая производительность активного приложения. После выхода в этом году Mango всё изменится. В многозадачности на WP7 будут использоваться методы как iOS, так и Android.

Если разработчикам необходимо, чтобы их приложение работало в фоновом режиме, они могут создать «фоновый агент». В чём разница между этим агентом обычным процессом, которому позволено использовать любые системные ресурсы? Фоновым агентам будет выделяться не более 10% процессорного времени, 5 мегабайт оперативной памяти, они смогут работать не дольше 15 секунд каждые полчаса (например, для того, чтобы синхронизировать информацию). Вот что интересно – если устройство подключено к зарядному устройству, ограничений будет меньше: приложение сможет использовать больше ресурсов телефона, работать чаще и продолжительнее. Скорее всего, это будет похоже на реализацию синхронизации по Wi-Fi через Zune, где спустя несколько минут после подключения смартфона к зарядному устройству, WP7 начинает автоматически синхронизировать с компьютером видео, музыку и изображения.

Причиной применения различных методов реализации многозадачности является необходимость соблюдения баланса между высокой производительностью системы, низким расходованием заряда батареи и возможностью работы фоновых задач. Один из способов требует особого внимания к системе со стороны пользователя, другой – более ограничивающий – не требует такого внимания, но более сложен для разработчиков. Как думаете, какой из них лучше подходит для устройств, которые становятся всё более и более мощными?

Система Orphus