Posted on 5. September 2010

Потоки в Silverlight приложениях

Read this article in your language IT | EN | DE | ES

В обычных (для веба и вне браузера) Silverlight приложениях по-умолчанию используется только один поток (интерфейсный) для выполнения пользовательского кода и работы инфраструктуры. И только некоторая часть механизмов технологии выполняется в паралельных потоках. Например сетевое взаимодействие (загрузка ресурсов из веба, взаимодействие с сервисами). Из этого следует, что если перегрузить интерфейсный поток задачами, то мы заблокируем не только возможность взаимодействия пользователя с приложением, но и весь браузер (для режима работы в браузере). Что бы этого избежать необходимо использовать дополнительные потоки, детали смотрите здесь.

hubsНо для Silverlight приложений во время работы на платформе Windows Phone 7 по-умолчанию доступно больше чем один интерфейсный поток.

При переносе Silverlight технологии на WP7, графическое ядро было изменено в соответсвии с условиями в которых необходимо работать приложениям. Как результат для Silverlight приложений в WP7 доступно по умолчанию два потока:

  • интерфейсный поток (UI thread) – отвечает за взаимодейсвие с пользователем и в нем выполнятеся код разработчика. Вычисления происходят с использованием CPU;
  • поток компоновщика (Compositor thread) – в этом потоке выполняется часть анимации. Вычисления происходят с использованием GPU.

Интерфейсный поток (UI thread)

Механизм работы этого потока похож на механизм работы интерфейсного потока Silverlight плагина для браузера. В интерфейсном потоке WP7 выполняются следующие задачи:

  • взаимодействие с пользователем;
  • разбор и создание объектов из XAML кода;
  • рисование графических эффектов при первом их создании;
  • код разработчика.

В виду того, что данный поток отвечает за получение данных от пользователя, отрисовку интерфейса, выполнения кода приложения, крайне важно чтобы поток оставалса максимально свободным. Поддержание максимально свободного интерфейсного потока является ключевой задачей для быстрых приложений

Поток компоновщика (Compositor Thread)

Это новый поток для Silverlight технологии, который появился в Windows Phone 7. Он позволяет часть операций Silverlight приложения переложить на GPU утсройства. Поток компоновщика выполняет несколько видов анимации которые выполняются упралвяя базовой текстурой на GPU. Что бы использовать этот механизм необходимо анимацию реализовывать через класс Storyboard. При использовании механизма анимации в коде данный потом задействовать невозможно. Задействовать этот поток можно используя следующие типы анимации:

  1. Opacity;
  2. Scale Transform;
  3. Render Transform;
  4. Rotate Transform;
  5. Plane Projection.

Но существует ряд ограничений, когда анимация не будет выполняться в этом потоке, а имеено, когда происходит анимация:

  1. Opacity Mask;
  2. не прямоугольная вырезка объекта;
  3. текстура анимированного объекта больше чем 2k x 2k пикселей.

Таким образом при умелом использовании новых возможностей Silverlight технологии для WP7 платформы можно повысить производительность своих приложений.

Думаю, что внесенные изменения в Silverlight технологию для платформы Windows Phone 7 стануть частью новых возможностей расширения для браузера Silverlight 5-й версии.



Exception: Stack empty.

Comments

trackback Сергей Лутай
11:20 AM on Tuesday, September 7, 2010

Потоки в Silverlight приложениях

В обычных (для веба и вне браузера) Silverlight приложениях по-умолчанию используется только один поток

trackback Alex Krakovetskiy blog
10:55 PM on Sunday, October 10, 2010

Дайджест технических материалов #3 (Silverlight и RIA)

Продолжаем публиковать ссылки на интересные материалы, в этот раз выпуск посвящен Silverlight и RIA.

Add comment


(Will show your Gravatar icon)

  Country flag

biuquote
  • Comment
  • Preview
Loading