`

Flash的运行机制:异步单线程

阅读更多
http://bbs.9ria.com/thread-48624-1-1.html

flash和我们平时常用的php之间最大的区别就在于其异步执行机制。这个异步机制最明显的表现在于“加载”,或称“网络通信”。

比如说php执行一句sql,我们通常会这样写:

$DB_SomeDb->query($sql);
//接下来的代码

php顺序执行,运行sql之后才会继续下面的语句,但是as不会。所有涉及到网络通信的操作,均会被flash player分配给专门的进程处理,而主程序的执行不受影响。比如用as加载一副图片,如果这样写:

_my_loader.load(new Request('图片路径'));
addChild(_my_loader.content);

就不会将目标图片加载到舞台上,因为_my_loader开始加载图片后,加载方法被flash player专门进行,而程序运行的顺序不变,于是马上执行下一步;要知道程序在电脑上运行的速度是远远大于网络传输加载的速度的,于是乎执行addChild把目标放在舞台时里面尚无任务图像信息,所以程序就会出错,正确的写法是这样的:

_my_loader.contentLoaderInfo.addEventListener(Event.COMPLETE,pic_load_complete);
_my_loader.load(new Request('图片路径'));
private function pic_load_complete(evt:Event=null):void{
  addChild(_my_loader.content);
}

我们使用一个侦听器来侦听加载结束的时间,确保所有的图片数据都加载完成之后再把目标图像放到五台上,如此便不会出错了。这样又会给我们一个感觉,是不是flash是多线程的,每次单独分配一个线程来进行这样的异步操作呢?

也不是。这里必须提到flash另外一个极其重要的概念“帧”。虽然到现在,flash开发已经几乎放弃了对帧的使用,但我们必须明白,如今flash的机制,依然是建筑于帧之上的。

帧对于flash来说是一个“定时器”,fp会定时轮巡所有的异步对象,并且将其状态发送出来。回到上面那个例子,_my_loader发出加载命令后,fp中专门负责加载的部门开始运作(其实是把这个事件加入任务,在主程序运行之余执行),每到一帧,flash会检查这个加载的运作情况,把已加载到的字节数通过ProgressEvent.PROGRESS广播出去,直到最后某次检查,发现全部加载完毕,就广播COMPLETE事件。所有的网络通信部分都是这样运行的。

于是可以看出,帧数的设置对于flash开发也是至关重要的。设置太高,不断轮巡会造成资源浪费;设置太低,很多基于帧的异步状态检查都会有延迟。由经验得出的:25~30帧会是比较好的选择。
分享到:
评论

相关推荐

    async-threading 让flex支持多线程

    Flex应用程序基于Flash Player或Adobe AIR运行,它们都遵循单线程模型。这意味着所有的代码都在同一个线程中执行,包括UI更新和后台操作。这可能导致UI响应变慢,特别是在执行长时间运行的任务时。 为了解决这个...

    Flash网络游戏开发入门经验共享.doc

    10. **单线程限制**:虽然Flash Player不支持多线程,但可以通过模拟异步处理来优化性能,例如使用时间片或事件队列来管理并发任务。 通过深入学习以上技术,初学者可以逐步掌握Flash网络游戏开发的基础,并逐渐...

    Async JavaScript

    虽然它是一种单线程的语言,但其独特的事件循环机制使得它能够在浏览器环境中高效地运行复杂的 Web 应用程序。随着时间的推移,许多曾经被认为是 JavaScript 的潜在竞争对手的技术(如 Flash、Silverlight 和 Java ...

    Amp-async-irc-server.zip

    Amp 是一个针对PHP设计的非阻塞并发框架,它的主要特点是基于事件驱动和回调函数,这使得它能够在单线程环境中处理大量的并发请求,极大地提高了系统资源的利用率。Amp 提供了事件循环机制,允许开发者编写异步代码...

    osx-flashcards:适用于 Mac OS X 的简单抽认卡应用程序

    6. **多线程**:为了提供更好的用户体验,osx-flashcards 可能使用多线程技术,如 GCD(Grand Central Dispatch)来异步加载数据或执行长时间运行的任务,确保主应用程序界面保持流畅。 7. **国际化与本地化**:...

    前端学科面试宝典面试题下载完整题目答案

    - **线程机制**:探讨 JavaScript 的单线程模型及其对性能的影响。 **5. ES6 新特性** - **`let` 与 `var` 和 `const` 的区别**:`let` 和 `const` 提供了块级作用域,而 `var` 只提供函数级作用域。`const` 还...

    LM3S9B92的开发板手册

    - **存储器保护单元(MPU):**提供了对存储器访问权限的控制机制,可以设置不同区域的访问权限,增强系统的安全性。 ##### 1.4 嵌套向量中断控制器(NVIC) **NVIC概述:** - **中断管理:**NVIC是Cortex-M3中的...

    AS3性能测试

    5. **并行与并发**:虽然AS3的单线程模型限制了并行处理,但可以利用时间片调度进行一定程度的并发操作。例如,在不同的帧之间执行耗时任务,以避免阻塞主线程。性能测试可以揭示并行与并发策略的效果,帮助改进程序...

    分布式 游戏 服务器

    5. **服务框架类**:EasyGame采用单实例无状态服务模型和服务异步单线程模型,简化了并发编程并避免了锁开销,进一步提高了系统性能。 6. **AgentService**:作为前端连接服务,AgentService负责用户的登录、连接...

    flashcards-day4

    5. **异步编程**:JavaScript是单线程的,但通过异步编程(如回调函数、Promise和async/await)可以处理非阻塞I/O操作,这是构建高性能Web应用的基础。 6. **DOM操作**:使用JavaScript操作DOM元素,如添加、删除、...

    MultiCoreServer:用于CheckOff App的基于AIR的套接字服务器

    2. 多线程:在AIR环境中,我们可以利用flash.system.Threading类来创建和管理线程,实现多任务并行处理。每个线程可以处理不同的套接字连接,以分担服务器负载。 三、优化策略 1. 并发处理:服务器需要能够同时...

    MTK7628ANdatasheet.zip

    MTK7628AN是一款基于 MIPS 架构的单芯片网络处理器,广泛应用于嵌入式设备,如无线路由器和网络存储设备。该处理器由联发科(MediaTek)公司设计,提供了强大的网络处理能力和多媒体功能。在"MTK7628AN datasheet....

    Google Chrome 浏览器架构解析及相关特性分析

    - **处理机制**:每个进程都有一个专门的线程来处理 IPC 通信任务。 #### 进程模型 Chrome 支持多种进程模型以满足不同场景的需求: 1. **进程模型1:一进程每站点实例(1-process-per-site-instance)** - **...

    操作系统复习大纲.docx

    3. **进程和线程**:进程是资源分配的基本单位,线程是执行的基本单位。 4. **任务、任务切换、任务调度**:任务是操作系统中的基本执行单元,任务切换是不同任务之间的执行权转移,任务调度则是决定哪个任务应该...

    ActionScript3.0开发人员指南

    - **使用Flash运行时的调试版**:指导如何利用Flash Player的调试版本来定位和解决错误。 - **在应用程序中处理同步错误**:讲解如何处理那些在代码执行期间发生的同步错误。 - **创建自定义错误类**:教授如何定义...

    Android 高仿基于android2.2(Froyo)的Contacts-IT计算机-毕业设计.zip

    - 查询大量联系人数据可能会阻塞UI线程,因此需要使用AsyncTask或其他异步机制来加载数据。此外,为了提高性能,可能采用了缓存策略和视图复用来减少内存消耗。 9. **测试与调试**: - 开发过程中,使用Android ...

    华师2017春操作系统作业.docx

    - 进程具有动态性、并发性、独立性、异步性和结构特征等特点。 2. **线程**: - 线程是进程中的一个执行单元,是CPU调度和分派的基本单位。 - 在同一进程中创建线程比创建新进程开销小,线程间共享内存更高效。 ...

    flex on java

    同时,Java的性能优化能力和多线程支持,确保了后端服务的高效运行。 3. **丰富的API与工具集**:Flex提供了丰富的UI组件库和数据绑定机制,简化了界面设计与开发过程。Java则拥有庞大的开源社区和成熟的开发工具,...

    Chromium浏览器(Windows)

    同时,它还支持多线程渲染和JavaScript异步执行,以提供更快的加载速度和流畅的用户体验。 不过,值得注意的是,Chromium并不包含一些Google Chrome的特有服务,例如Google同步功能,用户无法同步书签、密码、设置...

Global site tag (gtag.js) - Google Analytics