что такое потоки в функциях actionscript? - PullRequest
2 голосов
/ 20 января 2010

Я видел, что многие другие разработчики ссылаются на потоки в функциях ActionScript. Как новичок, я понятия не имею, что они имеют в виду так:

Что за нить в этом смысле?
Как бы я запускал более одного потока одновременно?
Как мне убедиться, что я запускаю только один поток за раз?

Спасибо ~ Майк

Ответы [ 4 ]

6 голосов
/ 20 января 2010

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

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

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

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

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

4 голосов
/ 20 января 2010

Это действительно зависит от того, что вы имеете в виду. Модель выполнения для ActionScript является однопоточной, то есть она не может запускать процесс в фоновом режиме.

Если вы не знакомы с многопоточностью, это, по сути, способность выполнять что-либо в фоновом режиме основного процесса.

Итак, если вам нужно было выполнить огромные математические вычисления в вашем проекте flex / flash, с помощью многопоточной программы вы можете сделать это в фоновом режиме, одновременно обновляя свой интерфейс. Поскольку ActionScript не является многопоточным, вы не можете делать такие вещи. Однако вы можете создать класс псевдопоточности, как показано здесь:

http://blogs.adobe.com/aharui/pseudothread/PseudoThread.as

2 голосов
/ 21 января 2010

Другие описали, что такое многопоточность, и вам понадобится многопоточность, если вы получаете хардкор в игровые движки C ++ и 3D, среди многих других дорогостоящих операций и языков, поддерживающих многопоточность.

Actionscript не имеет многопоточности. Он выполняет весь код в одном кадре. Таким образом, если вы создадите цикл for, который обрабатывает 100 000 000 элементов, это приведет к зависанию приложения. Это связано с тем, что проигрыватель Flash Player может одновременно выполнять только один поток кода на кадр.

Вы можете добиться псевдопоточности, используя:

  • Таймеры
  • Event.ENTER_FRAME

Они позволяют вам прыгать и выполнять код.

Двигатели Tween, такие как TweenMax , могут работать с 1000 объектов одновременно в течение нескольких секунд с помощью таймеров. Вы также можете сделать это с помощью Event.ENTER_FRAME. Существует нечто, называемое «чанкинг» (см. Презентация по оптимизации AS3 Гранта Скиннера ), в котором говорится «выполнять вычислительно дорогостоящие задачи за несколько кадров», например рисовать сложные растровые изображения, что является псевдо-многопоточностью Вы можете сделать с ActionScript.

Многие другие вещи являются асинхронными, например, вызовы служб. Если вы выполните запрос HTTPService во Flex, он отправит запрос на сервер, а затем продолжит выполнение кода в этом фрейме. После этого сервер все еще может обрабатывать этот запрос (скажем, он сохраняет 30-мегабайтное видео в базе данных на сервере), и это может занять минуту. Затем он отправит что-то обратно во Flex и вы сможете продолжить выполнение кода с помощью обработчика событий ResultEvent.RESULT.

Таким образом, Actionscript в основном использует:

  • Асинхронные события и
  • Таймеры ...

... для достижения псевдо-многопоточности.

0 голосов
/ 20 января 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...