场景介绍
自多道程序及多任务操作系统问世以来,CPU、内存等有限的系统资源成为系统中所有任务的竞争对象。合理安排各个任务对系统的响应速度以及资源消耗都有非常重大的意义。相比操作系统,开发者更加清楚应用中各个任务的重要程度;根据重要程度对应用的任务进行分类,能帮助系统更好地进行任务的调度。通过本指导,开发者可以了解在HarmonyOS系统中,如何利用QoS特性及相关的接口调节任务在系统中的运行时间分配。
本文用于指导开发者基于QoS特性实现应用任务优先调度属性自定义。
基本概念
QoS
QoS(quality-of-service),即服务质量,在HarmonyOS中QoS特性主要指任务的优先调度属性。开发者可以利用QoS对要执行的工作进行分类,以指示其与用户交互的关联程度;系统则可以根据任务设置的QoS安排各任务的运行时间和运行次序
。例如,当系统中有多个任务需要同时执行时,一些与用户交互关联程度不高的后台下载任务可以推迟到更晚的时间执行,且每次执行时分配更少的时间;而用户感知明显的动效绘制等任务则需要立即执行,并分配更多的执行时间。
QoS等级定义
目前,HarmonyOS系统一共划分如下了6个QoS等级,从上到下与用户交互的关联程度依次递增,适用于多种不同的应用场景及负载特征情况。
QoS等级 | 使用场景 | 负载特征 |
---|---|---|
QOS_BACKGROUND | 后台且用户不可见任务,例如数据同步、备份。 | 任务完成需要几分钟甚至几小时。 |
QOS_UTILITY | 不需要立即看到响应效果的任务,例如下载或导入数据。 | 任务完成需要几秒到几分钟 |
QOS_DEFAULT | 默认。 | 任务完成需要几秒钟。 |
QOS_USER_INITIATED | 用户触发并且可见进展的任务,例如打开文档。 | 任务在几秒钟之内完成。 |
QOS_DEADLINE_REQUEST | 越快越好的关键任务,如页面加载。 | 任务几乎是瞬间完成的。 |
QOS_USER_INTERACTIVE | 用户交互任务(UI线程、刷新界面、动效)。 | 任务是即时的。 |
QoS等级定义为枚举类型QoS_level,如上表所示;枚举值定义如下。
QoS_Level声明
typedef enum QoS_Level {
/**
* 适用于数据同步等用户不可见的后台任务。
*/
QOS_BACKGROUND,
/**
* 适用于下载等不需要立即看到响应效果的任务。
*/
QOS_UTILITY,
/**
* 默认的QoS等级。
*/
QOS_DEFAULT,
/**
* 适用于打开文档等用户触发并且可以看到进展的任务。
*/
QOS_USER_INITIATED,
/**
* 适用于页面加载等越快越好的任务。
*/
QOS_DEADLINE_REQUEST,
/**
* 适用于动效绘制等用户交互任务。
*/
QOS_USER_INTERACTIVE,
} QoS_Level;
功能效果
QoS等级更高的任务相对等级更低的可能被分配更多的CPU时间。
下面将展示合理使用QoS对程序执行的优化效果。
QoS对线程执行的优化
优化前