2011-04-13 69 views
4

Flex是单线程还是异步?如果是这样,一个编程模型如何以两种方式表现?请用一个实例来解释我,我正在对此加以限制。Flex线程/异步行为

回答

3

用Flash代替Flex会更准确。 Flex只是框架,线程和异步等基本概念与技术相关,即Flash。
是的,Flash是单线程的:你不能自己创建线程。但是有些时候,闪光灯可以让你不同步。例如HttpService,WebService,URLLoader

这是什么意思?这意味着,从现在开始,当您发送请求到当下,当您收到响应时,您可以继续执行其他代码并更新显示列表。当你得到回应时,事件被分派(或当请求失败时)。

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

1

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

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

0

Flex/ActionScript是Flash的单线程不是。一些操作,比如URLLoader创建另一个无法控制的线程。一旦完成,您将从URLLoader对象获得一个事件。

0

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

0

如前所述,实际进程线程是在玩家级别上处理的,目前它并不支持真正的多线程。

但是,这并不是说你不能拥有一个以异步方式工作的编程模型。说任何闪存应用程序的目的是以某种方式驱动显示器是非常安全的,因此任何处理策略都是由显示列表驱动的。

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

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