QP (框架)
活动对象原生支持并自动保证以下并发编程中的最佳实践:[3]
保证所有的任务数据都应当是本地的,私有的,并且无法从系统的其他部分访问。
任务键的通信应当使用中间事件对象异步进行。使用异步通信可以使各任务真正互相独立并不互相阻塞。
在任务的整个生命周期中它都应当响应事件,因此其主要部分应该是一个事件循环。
任务应当每次处理一个事件,并在处理完毕之前不应响应其他事件,因此在任务之中没有竞争冒险。
使用活动对象使得思考并发编程变得容易。相反,直接使用RTOS任务有很多不利之处,尤其因为他们对使用方式不加限制,也不提供自动进行并发最佳实践的机制。[4] 使用活动对象使抽象程度提高了一个层次,并且能让编程者更好地表达意图和提高生产率。
活动对象并不能凭空产生,这往往需要一个软件框架来为每个活动对象提供一个线程,提供事件排队服务以及基于事件的定时服务。在资源受限的嵌入式系统中,可扩展性和效率是此类框架的最大着力点之一。那些传统上建立在RTOS之上的建模工具和各类框架增加了内存消耗和CPU开销。
QP框架在设计时就着眼于效率和小内存占用,而且在独立构型中不需要一个RTOS。事实上,和传统的RTOS比起来,QP框架提供较少的RAM和ROM占用。这是有可能的;因为活动对象不需要阻塞,因此传统RTOS中的大部分阻塞机制(如信号量等)是不需要的。
这些特性使得事件驱动框架适用于单片机。比起原始的RTOS任务,事件驱动框架是一个更高层次的抽象,并且资源占用率和能量消耗也低。这是由于事件驱动模型仅在处理事件时激活CPU,而在绝大多数时间CPU处于低功耗模式。