Краткий конспект доклада с конференции Adobe MAX 2011, на тему Concurrency In Flash Runtimes : Async ActionScript pre-alpha http://tv.adobe.com/watch/max-2011-develop/concurrency-in-flash-runtimes/ авторы: Jason Williams (senior Flash Player engineer), и Krzysztof Palacz (senior computer scientist on the virtual machine).
Сразу перейду к самым важным моментам:
0:00. Demo
Все начинается с продолжительного Demo новых возможностей.15:00. Action Script Workers
Action Script Workers, похожа на html web workers только быстрее =) - по крайней мере тест запущенный на JS, выполнялся значительно медленнее.В терминологии Action Script многопоточности, каждый поток называется Worker.
Основные свойства Worker-а:
1. Shared Nothing Каждый поток имеет свое адресное пространство;
2. Message Passing. Общаться между Worker-ами можно за счет "сообщений" (но, как дальше будет понятно, не с помощью привычных для нас Event-ов);
3. Shared Render Surface. Визуализация в отдельном потоке.
17:30. Life Cycling
Жизненный цикл потока.1. создаем Worker.
var domain : WorkerDomain = WorkerDomain.current; var url : URLRequest = new URLRequest(“some.swf”); var worker : Worker = domain.createWorkerFromURL(url);
2. другие варианты создания потока:
createWorkerFromByteArray(bytes); createWorkerFromWorker(worker); createWorkerFromMain();
3. запускаем / останавливаем:
var toplevel : Promise = worker.start(); //… var wasRunning : Boolean = worker.stop();
19:30. Worker states
Состояния Worker.
Решил не грабить картинку, т.к. не уверен, что это разрешено правообладателем.
Передумал =)
скриншот взят из доклада Concurrency In Flash Runtimes / Adobe MAX 2011
21:00. Remote Method Invocation
Коммуникация с потоком.Promises - локальное представление объекта, находящегося в адресном пространстве Worker-а. Работа с Promise выглядит насколько изощренной:
var toplevel : Promise = worker.start(); toplevel.foo.bar(); //worker code // package foo { public function bar():void { trace(“bar”);} }что связано с тем что Promise дает доступ к верхнему уровню пакета Action Script кода запускаемого в Worker-е.
24:20
получение результатаvar barResult : Promise = toplevel.foo.bar(); // async асинхронный запрос // barResult.local::when(function(result:Promise):void { trace(result.local::receive()); }); // sync // // не переходит на следующую строчку // // пока не получит ответ от потока // var value:String = String(barResult.local::receive()); //worker code // package foo { public function bar():void { return “bar”;} }
28:15. Passing arguments
Каждый worker обладает своим адресным пространством, при вызове функции все параметры копируются, и только копии передаются внутрь потока;var baz : Promise = worker.start(); baz.foo(myObject); // worker code // public function foo(value:MyObject):void { trace(value.name); }Wrap. Однако существует способ передачи больших объектов без копирования:
var bar : Promise = Promise.wrap(largetObj); var baz : Promise = worker.start(); baz.foo(bar); // worker code // public function foo(value:Promise):void { var largeObj:Object = value.local::receive(); trace(value.name); }Важный момент: нельзя копировать или сериализовать экземпляры Display List
33:00. Pipelining
Работа с очередью (Queue)Можно описывать порядок выполнения методов, которые будут запущенны один за другим
var baz : Promise = worker.start(); baz.foo(); baz.bar(); baz.foobar(“baz”);
33:45. снова Demo
37:15. Rendering (workerview)
Работа с визуальным представлением1. указать главному потоку визуальную область, в которой мы заинтересованны.
var view : WorkerView = worker.view; view.viewport = new Rectangle(0, 0, width, height); addChild(view);2. После этого мы получаем от потока Bitmap который можем отразить в главном потоке.
3. Изображение создается только на процессоре CPU.
4. Минус такого подхода в том, что главному потоку всегда отдается приоритет, поэтому вспомогательный поток может выполнятся с низким frame rate.
40:00. Runtime API (What can a worker do?)
чего не следует делать в потоке, так это использовать Native Menu – что связано с тем что в MacOS меню не может быть запущенно в отдельном потоке.42:05. Security
Same Domain Only, а значит, если нужно в разных Application Domain, запускайте отдельные приложения. Хотя потом выяснилось, что возможно они займутся и крос-доменной коммуникаций, но только если будет подходящий запрос на фичу.43:50. Are You in?
Линк на пре-релиз группу. Учтите надо линк вводить маленькими буквами.adobe.ly/on6qeS
44:00. Серия вопросов
PS
Ну и орут же они порой в микрофон. В наушниках слушать не комфортно.PPS
Естественным образом возник вопрос:А Можно ли как-нибудь сохранить видео с MAX?
К сожалению простым способом — через FireBug в FF ничего похожего на видео-поток я не увидел. У кого-нибудь это получалось?
PPPS
Возможно я допустил где-либо неточность или опечатку. Поэтому прошу не стесняться, и указывать на место расхождения с действительность.В связи с чем хотел бы прикрутить плагин для исправления ошибок, - с помощью которого читатель легко может выделить текст, исправить его на более правильный и отправить автору. Если вы знаете о таком плагине, пожалуйста укажите его в комментариях. Спасибо.
Комментариев нет:
Отправить комментарий