12.3.3 活动对象

活动对象是线程的特有形式,用这种方式实现以便减轻它们带给操作环境的负担。Symbian操作系统的设计者意识到,应用中的线程在很多情况下可能会发生阻塞。由于Symbian操作系统致力于通信工具方面,因此许多应用程序具有类似的执行模式:它们向一个通信套接字写数据或者通过管道发送信息,然后在等待接收者的响应时阻塞。这样设计活动对象,是为了当它们从这种阻塞状态返回时,具有进入被调用代码的单一入口点,这简化了它们的实现。由于活动对象运行在用户空间,因此它们具有Symbian操作系统线程的特性。它们本身具有自己的纳线程,并且能够加入Symbian操作系统的其他线程构成操作系统的一个进程。

假若活动对象仅仅是Symbian操作系统线程,有人就会问操作系统从这种简化的线程模型中得到了什么益处。活动对象的关键点体现在调度上。所有的活动对象在等待事件的时候驻留在一个单一进程中,对系统而言可以作为一个单一的线程。内核不必连续地检查每一个活动对象是否被解除阻塞。因此,单一进程中的活动对象,能够由在一个单一线程中执行的单一调度器来协调。通过将在其他方面作为多线程执行的代码结合到一个线程中,通过构建固定的入口点进入代码,以及通过使用一个单一调度器来协调它们的执行,活动对象构成了标准线程的一种高效、轻量版本。

认识到活动对象和Symbian操作系统进程结构在何处融合成为一体是很重要的。当一个传统线程通过系统调用进入等待状态从而阻塞自己的运行时,操作系统仍然需要检查这个线程。在上下文切换期间,操作系统需要花费时间检查处于等待状态的阻塞进程,决定是否需要将其移动到就绪状态。活动对象把自己放入等待状态以等待特定的事件,因此,操作系统不需要去检查它们,而只是在特定的事件发生后移动它们。结果就是更少的线程检测以及更好的性能。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元