代码之家  ›  专栏  ›  技术社区  ›  invertedSpear

ActionScript函数中的线程是什么?

  •  2
  • invertedSpear  · 技术社区  · 14 年前

    我见过很多其他开发人员在ActionScript函数中引用线程。作为一个新手,我不知道他们指的是什么,所以:

    从这个意义上说,线是什么?
    如何一次运行多个线程?
    如何确保一次只运行一个线程?

    谢谢 迈克

    4 回复  |  直到 14 年前
        1
  •  6
  •   John Feminella    14 年前

    螺纹 表示一种让程序同时执行多个作业的方法。尽管工作是否可以 事实上 同时发生取决于几个因素(最重要的是,程序运行的CPU是否有多个可用的内核来完成工作)。线程很有用,因为它们允许在一个上下文中完成工作,而不干扰另一个上下文。

    一个例子将有助于说明为什么这一点很重要。假设您有一个程序,它获取电话簿中姓名与某个字符串匹配的所有人的列表。当人们点击“搜索”按钮时,它将触发一个昂贵且耗时的搜索,这可能在几秒钟内无法完成。

    • 如果您只有一个单线程执行模型,那么在搜索完成之前,UI将挂起并且没有响应。您的程序别无选择,只能等待结果完成。

    • 但是如果您有几个线程,您可以将搜索操作卸载到另一个线程,然后 回调 --当工作完成时调用的触发器——让您知道事情已经准备好了。这将释放UI并允许它继续响应事件。

    不幸的是,由于actionscript的执行模型不支持本机线程,因此无法获得真正的线程。有一个粗略的近似值叫做“绿色线程”,它是由执行上下文或虚拟机控制的线程,而不是由更大的操作系统控制的线程,通常是这样做的。虽然我不能说他们的使用有多广泛,但有几个人已经尝试过了。你可以在亚历克斯·哈瑞的博客上读到更多。 here 并查看ActionScript的绿色线程示例 here .

        2
  •  4
  •   sberry    14 年前

    这真的取决于你的意思。ActionScript的执行模型是单线程的,这意味着它不能在后台运行进程。

    如果您不熟悉线程,那么它本质上是在主进程的后台执行某些操作的能力。

    因此,如果需要在flex/flash项目中进行大量的数学计算,使用多线程程序,您可以在后台进行计算,同时更新UI。因为actionscript不是多线程的,所以您不能执行此类操作。但是,您可以创建一个伪线程类,如下所示:

    http://blogs.adobe.com/aharui/pseudothread/PseudoThread.as

        3
  •  2
  •   Lance Pollard    14 年前

    其他人已经描述了线程是什么,如果你把硬核变成C++和3D游戏引擎,在许多其他计算开销很高的操作中,以及支持多线程的语言,你就需要线程。

    ActionScript没有多线程。它在一个帧中执行所有代码。所以如果你创建一个 for 循环处理100000000个项目,它将导致应用程序冻结。这是因为Flash播放器一次只能执行一个代码线程,每帧。

    您可以使用以下方法实现伪线程:

    • 计时器
    • 事件.输入帧

    它们允许您跳转并执行代码。

    吐温发动机 TweenMax 可以操作 1000's of objects at once 用定时器数秒。你也可以用 Event.ENTER_FRAME .有一种叫做“分块”(查看 Grant Skinner's AS3 Optimizations Presentation 这意味着“在几个帧上执行计算上昂贵的任务”,比如绘制复杂的位图,这是一个可以用ActionScript执行的伪多线程操作。

    其他很多事情都是异步的,比如服务调用。如果你做一个 HTTPService 在flex中,它将向服务器发送一个请求,然后在该帧中继续执行代码。完成后,服务器仍然可以处理该请求(比如它正在将一个30MB的视频保存到服务器上的数据库中),这可能需要一分钟的时间。然后它会将一些内容发送回flex,您可以使用 ResultEvent.RESULT 事件处理程序。

    所以actionscript主要使用:

    • 异步事件,以及
    • 计时器…

    ……实现伪多线程。

        4
  •  0
  •   Steve Psaltis    14 年前

    一个线程允许您同时执行两个或多个操作块。默认情况下,除非您明确地启动一个新线程,否则您将始终在同一个默认线程上执行。