Actionscript 3 (as3) модель параллелизма - PullRequest
3 голосов
/ 13 февраля 2011

У меня есть некоторые доказательства состояния гонки [Примечание: см. Обновление ниже] в программе Actionscript 3 (as3), в которой для определенного объекта были вызваны методы:

  1. Когда он обрабатывает события асинхронной загрузки
  2. Из сценария, добавленного к кадру на временной шкале фрагмента ролика

Что такое модель параллелизма в AS3? Сериализуется ли обработка событий (то есть каждый обработчик выполняется до завершения для одного события за другим, несмотря на какую-либо многопоточность)? И сценарии в кадрах сериализуются с этим потоком событий? Я подозреваю, что ответ на этот последний вопрос отрицательный.

Я предпринимаю шаги, чтобы систематически регистрировать, возникает ли / когда состояние гонки, но было бы хорошо узнать, какие гарантии (если есть) предоставляет AS3.

ОБНОВЛЕНИЕ: я сделал простую проверку в своих обработчиках событий, чтобы записать, обрабатывался ли обработчик событий уже на конкретном интересующем объекте, и я обнаружил, что действительно происходит, т.е. возможны условия гонки. Кто-нибудь еще сталкивался с этим и что вы с этим сделали?!

Ответы [ 2 ]

0 голосов
/ 14 апреля 2011

Существует только один поток, в котором может выполняться код AS3.

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

Например, вы можете запустить воспроизведение анимации и одновременно загрузить файл. То, что завершается первым, полностью зависит от системы.

Другой пример, который на самом деле не является условием гонки, но имеет похожий симптом, - это использование цикла for..in (или for..each) для добавления нескольких слушателей для одного и того же события. Слушатели получат событие в том порядке, в котором они были добавлены, но цикл for..in является случайным, поэтому вы увидите случайные результаты.

0 голосов
/ 13 февраля 2011

В Flash нет «реального» параллелизма - все, включая обработку событий, синхронизируется по основной временной шкале.Все ваши операции обязательно будут выполнены в точном порядке, указанном в коде.

Но, конечно, могут возникнуть проблемы, если вы основываете результат одного «асинхронно запущенного» (я собираюсь использовать этот термин, хотя он не совсем корректен в строгом смысле) блока операций нарезультат другого - который может иметь место при использовании обработчиков событий.Вам нужно будет найти способ самостоятельно решить эти проблемы программно;в ActionScript нет встроенных конструкций, таких как синхронизированные или атомарные, нет потоков и блокировок или каких-либо других подобных механизмов.

Существуют способы имитации многопоточности во Flash, и это руководство может быть интересным способом начать поиск решения, поскольку оно объясняет некоторые базовые концепции.

...