为什么Flex / ActionScript目前不支持线程化?
答案 0 :(得分:5)
Flash和Flex基于Actionscript,它不支持线程。 Adobe的官方推理是,线程可能会在不同的用户计算机上造成非常不同的行为,并且线程中的竞争条件可能会导致性能问题,如Flash播放器这样已经很强大的性能平台。
在未来的Flash版本中,有人提到支持类似于HTML5中的工作组池,但这还不是官方的。
有关如何在Actionscript中伪造线程的信息,请查看Huen Tue Dao关于greenthreads的演示文稿:http://www.slideshare.net/queencodemonkey/360flex-greenthreading-in-flex
另一种选择是向Pixel Bender发送数字密集的计算。 Pixel Bender是一种在自己的线程上运行的闪存服务,可提供更好的性能。有关实施此技术的更多信息,请查看:http://www.adobe.com/devnet/flex/articles/flashbuilder4_pixelbender.html
答案 1 :(得分:3)
这是其中一个没有答案的问题,是吗?
Flash Player支持线程化;但是,该功能不会向开发人员创建应用程序。
线程可能很复杂,很容易被滥用,从而产生因创建太多线程而导致的性能问题。传统上,Adobe决定不让开发人员在暴露的API方面悬挂自己的绳索。
[尽管许多开发人员都想方设法自行挂起]
答案 2 :(得分:1)
它没有,在ActionScript中没有内置的方法来进行线程化。 。您可以检查this question以模拟假伪线程。
答案 3 :(得分:1)
为什么呢?因为并发是危险的。线程是必要的邪恶。而且他们经常被误用和过度使用。它并没有优化算法,而是并行化,尽管并行化版本实际上需要的资源是单线程的10倍,而这又需要10倍于最佳资源。
FlashPlayer专为一系列特定任务而设计,为Flash平台创建内容非常简单,只需一个很好的决定,SWF就不会完全耗尽所有核心。
最后,这是一个政治决定,我实际上对它很满意。 FlashPlayer有一个死的简单执行和渲染模型,不能遇到死锁或竞争条件,只能阻塞一个核心。这就像决定一样,任何电话必须在60秒后结束。我见过很多人都在问为什么。好吧,因为像我这样的人不喜欢GUI冻结超过一分钟的想法。
格尔茨
back2dos
答案 4 :(得分:0)
要保持低门槛,因为线程通常会导致比初学者程序员更有用的麻烦。 Flash通常被那些只想要WOW因子的人使用,因此adobe可能会做出政治决定,以尽量减少他们必须提供的支持。
理想情况下,他们会支持futures/promises(我通过阅读有关Io语言的内容),基本上是异步函数。正如RJ Owen所提到的那样,Web工作者在后台线程中运行并且不阻止ui线程是理想的。
但实际上处于低级别,这对Adobe来说可能很难,因为执行模型与图形功能紧密耦合。从对架构的基本了解来看,flash播放器vm只读取在单线程模型中运行的预编译字节码,因此adobe必须从根本上改变一些东西才能使其工作。