• as3中的多线程


      从fp11.4开始支持worker技术, 即as3中的线程概念, 到了fp11.5, flascc中开始支持pthread家族来创建线程。

      总的来说, as3中有两种创建线程的方法:

    1、直接在as3中利用worker家族接口来创建和使用线程。

    2、利用flascc技术在c中使用pthread家族接口来创建和使用线程。adobe官方文档明确指出, 使用pthread创建的线程, 最终也是使用as3中的worker来实现的。

      

    一、worker对象的创建和获取

    1、利用worker家族接口创建的worker的获取

      有三种途径, 如下:

      1.1 创建worker的时候直接获取

    var worker: Worker = WorkerDomain.current.createWorker(swfBytes);

      1.2 在要获取的地方使用Worker.current获取当前代码所在的线程。

      1.3 利用WorkerDomain.current.listWorkers()来获取当前所有的worker列表。

    2、利用pthread家族接口创建的worker的获取

       因为利用pthread_create创建出现的线程实际上最终也是会生成一个worker来运行的,所以也就有了对于这个worker对象的获取。但是这时候只能使用1.2和1.3的方法来获取, 而没办法直接使用1.1可以放线程创建者来获取当前创建的worker。 因为这个原因, 或许会给使用者带来不便。

    二、worker之间的通讯

    1、worker之间的消息传递

      消息传递只有一种方式, 通过MessageChannel对象。

    2、worker之间的数据传递

       数据传递有两种方式。

      1  通过worker本身, 设置其共享属性, 即setSharedProperty。

      2  通过MessageChannel, 通过send和receive进行发送和接收。需要注意的是, 使用MessageChannel发送数据时有可能出现如下的错误:

          1、

        MessageChannel关闭的问题。

        worker A创建一个连接worker B的通道channel, A和B有任何一方没有持有这个channel,即使channel已经被设置为shared property, 这个channel也是一个local var, 随时可能被close。

        Worker状态变为running和Worker对应的Sprite对象的构造时机问题。

        Worker状态变为running的时机要早于Worker对应的Sprite对象的构造。

      两种传递方式能够传递的对象是一致的, 分两类:

      1  按值传递, 可以传递被AMF3序列化的对象。

      2  按引用传递, 目前只有五个对象,即ByteArray(shared)、MessageChannel、Worker、Mutex、Condition。

      需要注意的是, 如果要传递一个自定义对象, 这个自定义对象也是按值传递的, 但是自定义对象里不能包含上述五种按引用传递的对象作为其属性, 否则会报类似如如下的错误:

      Object无法转换为xx对象。

      有一个解决方案可以传递自定义对象, 对象里面包含按值传递的属性和按引用传递的属性:

      先在worker里设置其共享属性, 然后通过MessageChannel传递该worker给另外一个worker, 组后在另外一个worker的代码里通过被传递的worker组建出自定义对象。代码如下:

    三、关于pthread和worker的关系

      1、thread proc函数的运行和worker的载入(构造函数, added to stage事件)先后顺序关系。

      2、如果一个thread proc是一个死循环函数, 那么worker本身能否处理自身事件,比如enter frame等。

        3、关于pthread与普通worker之间的性能、内存使用的测试对比。

  • 相关阅读:
    win32com操作word(3):导入VBA常量
    win32com操作word(2):常用用法
    win32com操作word(1):几个重要的对象(28.35)
    文件操作:os模块与os.path模块
    python上下文管理器
    OpenStack基础知识-单元测试工具介绍
    python测试模块-pytest介绍
    Python包管理工具setuptools详解及entry point
    OpenStack基础知识-项目打包的步骤
    OpenStack基础知识-打包知识点
  • 原文地址:https://www.cnblogs.com/zilongblog/p/4675965.html
Copyright © 2020-2023  润新知