I3.12.2background task priority设计

多个后台任务并发时需要优先级调度而非先到先得

别名: 任务优先级 · 不是 FIFO · job priority · 先做哪件

概念解释

几件后台工作同时在,带宽、CPU、电量是一份。先到先得(FIFO)会让一件两小时的备份堵住一件三十秒的「把这张图发出去」。优先级调度按人此刻更需要的那件来排:小的、交互依赖的、用户刚提交的,可以插到大的、可延后的前面。没有优先级,并发只是把等待从「一件接着一件」变成「大家一起慢慢熬」,而最急的那件并不更快。

这条是调度策略。列表里能不能手动改顺序,是人的覆盖;这里先要求系统自己别用队列位置当重要性。

机制

执行器看见的是任务流,人看见的是「我现在等哪一件」。人的等待成本不是均匀的:发出这张图挡着对话,备份挡着的是半夜。FIFO 把到达时间当成重要性,等于用提交顺序冒充目标。资源又是互斥的:上行带宽被备份占满,小上传的完成时间从三十秒变成「等备份到某个缝」。优先级把任务分成至少两档——交互关键与可延后——并允许高档抢占或穿插。抢占要保存低档的断点,否则优先级变成破坏耐久。

默认优先级也应可推断:用户前台正在看的对象上的任务、体积小的、截止近的,高于静默的全库扫描。推断错了会比 FIFO 更气人,所以默认要保守,把明显的交互关键提前即可,不要做复杂的隐式打分让人无法预测。

边界

只有一件任务时优先级无意义。所有任务同等紧急(批量导出十份同样的报告)FIFO 是可预测的,强行打分会让人觉得被插队。实时约束(直播推流)不是优先级问题,是独占资源,其他后台应让路到暂停,而不是「稍微优先一点」。系统自己的作业(系统备份、应用更新)会和产品抢资源;产品内的优先级无法指挥系统,但可以在系统忙碌时把可延后任务自己降档,避免两头抢。电量低时应把所有可延后的降到停,只留交互关键,这是优先级随情境翻转,不是取消优先级。

怎么落地

  • 至少两档:用户正在等的(发送、导出当前打开的文件)高于可延后(全库备份、预取)。高档可穿插,低档被抢占时从断点续。
  • 不要只按提交时刻排序。同等档内可以用 FIFO,档与档之间不行。
  • 正在被等待的那件应能从状态上看出「正在占用资源」,避免人以为卡住。
  • 验证:先提交一次长备份,三十秒后再提交一张图的发送。发送应在备份仍未完成时先结束。若发送排在备份之后整整两小时,就是 FIFO。再在前台打开一份正在导出的文档:这份导出应高于同一时刻提交的后台预取。

延伸

  • 同组I3.12.1 长任务需要能在应用退出或设备重启后继续执行或恢复 · I3.12.3 用户应能对已提交的后台任务重新排序或取消而非只能等待 · I3.12.4 后台任务消耗的系统资源需要对用户透明,避免被误判为异常耗电耗流量
  • 相邻I3.07 后台任务 · I1.03 注意力保持上限
  • 站内检索job priority · FIFO · preemption

同组卡片

快捷操作

分享

分享当前页面

ios_share

https://hci.top/zh/handbook/I3.12.2