flex异步I / O操作是否在工作线程上?

时间:2012-01-22 06:37:07

标签: multithreading flex

我知道Action Script不提供多线程,因此在编写flex应用程序时,我们只能在一个线程上工作。这对于渲染我的UI是好的。

然而,当喜欢flex而不是silverlight时会出现一些问题:

  1. 作为一个UI层,单个线程已经足够好但是假设对于像Flex这样的操作的Aync httpservice,在内部它会使用一些工作线程来管理异步操作然后回到主线程吗?看起来它确实如此,因为我的UI不会冻结。
  2. flex / flash播放器可以并行处理多个httpservice呼叫吗? (例如,UI的多个部分同时加载数据。)
  3. 动画内容如何(例如并行动画) - flash播放器内部是否利用一些线程来加速图形,还是在UI线程上完成?

1 个答案:

答案 0 :(得分:3)

  

但是假设对于像Flex这样的操作的Aync httpservice是公平的,在内部它会使用一些工作线程来管理异步操作然后回到主线程

没有。 响应数据的处理发生在与更新UI相同的线程中。例如,如果在一次调用中返回5,000个AMF对象,则Flash Player将在线程上反序列化这些对象,这将导致UI冻结。

在内部,浏览器可能正在使用线程来管理来自结束URL的响应加载。但是,一旦返回响应,并从浏览器切换到Flash播放器插件,则在主线程上发生该数据的反序列化和处理。

  

flex / flash播放器可以并行处理多个httpservice调用吗? (例如,UI的多个部分同时加载数据。)

是。 此处的限制是从浏览器强制执行的,即浏览器的最大并发HTTP请求数。这在浏览器到浏览器之间有所不同,但一般来说,将多个请求发送到后端服务是很好的(并鼓励)。

值得熟悉AsyncToken,这是处理并发调用时使用的Flex主类,确保请求和响应匹配在一起。

请注意,Flex中用于与远程服务通信的大多数类(例如,HttpServiceRemoteObject)都会公开concurrency属性,该属性定义对象应如何反应多个并发请求。 (允许开发人员明确允许或禁止)。

  

动画内容如何(例如并行动画) - flash播放器内部是否利用一些线程来加速图形,还是在UI线程上完成?

这不是我的专业领域,有人可能会纠正我。但是,我相信Flex会通过生成一系列KeyFrame来创建动画,这些KeyFrame会随着时间的推移更改UIComponent上的值的属性,然后执行它们。 (执行发生在与其他所有相同的线程中)。 因此,通过聚合关键帧的目标并一起执行它们来生成Parallal动画。

例如:Keyframe n at ms300 = { UIComponent1.x = 300; UIComponent2.y = 300 }