1

概括:

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

单一方法的例子:

var ball:Date;

method1 ():Date {

    ball = new Date();

    <some code here>

    return ball;

}

问题:

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

2) 在单线程环境中是否存在可以重叠执行方法的任何其他场景,或者 AVM2 是否仅限于一次执行 1 个方法?

研究:我已经阅读了https://www.adobe.com/content/dam/Adobe/en/devnet/actionscript/articles/avm2overview.pdf,其中解释了 AVM2 有一个用于运行代码的堆栈,以及对methods 看起来,如果没有第二个堆栈,堆栈系统一次只能容纳 1 个方法执行。我只是想与 StackeOverflow 专家再次确认一下。

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

4

1 回答 1

2

ActionScript 是单线程的;不过,可以通过 ActionScript 工作程序支持并发,这些工作程序是并行运行的多个 SWF 应用程序。

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

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

编组切片

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

弹性跑道

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

AVM2 执行 20 毫秒的编组切片,根据帧速率执行用户操作、失效和渲染。

avm2 切片

于 2015-10-09T05:04:55.027 回答