HarmonyOS Next开发学习手册——【线程调度】QoS 开发指南

场景介绍

自多道程序及多任务操作系统问世以来,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对线程执行的优化

优化前

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值