Flex线程/异步行为

时间:2011-04-13 07:46:57

标签: flex

Flex是单线程还是异步?如果是这样,编程模型如何在两种方式中表现?请用一个实例向我解释一下,我正在接受这个问题。

5 个答案:

答案 0 :(得分:3)

说Flash而不是Flex会更正确。 Flex只是框架,线程和异步等基本概念与技术有关,即Flash 是的,Flash是单线程的:您无法自己创建线程。但有一些时刻,闪存可以让你不同步。例如HttpServiceWebServiceURLLoader

这是什么意思?这意味着,从您发送请求的那一刻起,当您收到响应时,您可以继续执行其他代码并更新displaylist。当你得到响应时,会调度事件(或者当请求失败时)。

同样在AIR中,某些带文件的操作可以以异步方式处理(copyToAsyncdeleteFileAsyncgetDirectoryListingAsync,...)。同样在这里:例如,当您的文件正在复制时,您会收到进度事件,并且您可以更新视图(例如进度条)。

答案 1 :(得分:1)

请注意,您可以使用外部Alchemy模块(C程序)或PixelBender(图像处理)对Flash进行多线程处理。顺便说一下,Adobe currently working可以在不同的线程上启动多个SWF。

考虑到多线程和异步行为之间的区别,请记住Flash是“基于帧的”。您编写的每个代码,即使在侦听异步事件时,也会在每个帧循环上以特定的线性流程执行。

答案 2 :(得分:0)

Flex / ActionScript是Flash的单线程不是。某些操作(如URLLoader)会创建另一个无法控制的线程。完成后,您将从URLLoader对象中获取一个事件。

答案 3 :(得分:0)

简短回答,Flash Player解释的代码是单线程的,但Flash Player本身是多线程的,因此您可以拥有异步事件/函数。

答案 4 :(得分:0)

如前所述,实际的流程线程是在播放器级别处理的,目前不支持真正的多线程。

但是,这并不是说您不能拥有以异步方式运行的编程模型。可以肯定地说,任何闪存应用程序的目的都是以某种方式驱动显示器,因此任何处理策略都是由显示列表驱动的。

如果有人在谈论Flex中的异步编程模型,他们很可能是指在Flex component life cycle中发生的失效/更新过程。这为在下一个显示列表更新上运行昂贵的进程创建了一种方法,创建了一个半异步编程模型。

这种虚拟多线程对于需要对大量数据进行大量迭代的应用程序也很重要,例如复杂的数据可视化。可以将大型算法定义为一系列较小的块,每个较小的块在显示列表更新(帧改变)上处理。这允许应用程序的其余部分在处理下一个块之前处理事件并进行任何显示更新。