方法可以重叠执行吗?

时间:2015-10-09 01:19:22

标签: actionscript-3 avm2

要点:

我试图找出在 单线程 上执行时,单个方法在重叠时是否可以执行两次。或者,如果可以在重叠中执行两种不同的方法,当它们共享对特定变量的访问时,可能会发生一些不需要的行为。

单一方法:

var ball:Date;

method1 ():Date {

    ball = new Date();

    <some code here>

    return ball;

}

问题:

1)如果使用事件系统每隔20ms触发一次method1,并且整个方法执行时间超过20ms,那么该方法是否会重叠执行?

2)单个线程环境中是否有其他方案可以重叠执行方法,或AVM2一次只能执行1个方法?

研究:我已阅读https://www.adobe.com/content/dam/Adobe/en/devnet/actionscript/articles/avm2overview.pdf,其中解释说AVM2有一个用于运行代码的堆栈,方法说明似乎没有第二个堆栈,堆栈系统一次只能容纳1个方法执行。我只想仔细检查一下StackeOverflow专家是否可以查看。

我正在处理一些时间敏感数据,并且必须确保方法不会同时更改另一个方法正在访问的变量。

1 个答案:

答案 0 :(得分:2)

ActionScript是单线程的;但是,可以通过ActionScript worker支持并发性,ActionScript worker是多个并行运行的SWF应用程序。

如果您希望嵌套函数或匿名函数在函数的作用域链中执行,则存在异步模式。

我认为你指的是AVM2如何执行事件驱动的代码,你应该研究AVM2编组的切片。玩家事件在切片的开头执行。

marshalled slice

繁重的代码执行会降低帧速率。

elastic racetrack

它是线性的 - 同步阻塞。每个帧都不会并行调用代码。

AVM2执行20毫秒的编组切片,这取决于帧速率执行用户操作,失效和渲染。

avm2-slices