后台任务按帧预算分批时怎样保证继续前进:预算10的十四项后台任务(实例20)
把很多小任务集中在一帧做完,可能使画面出现长停顿。分批处理会把工作摊开,但不可分割的任务比预算还大时,也需要明确处理规则,否则队头会永远堵住。
先确定规则与输入
任务按先进先出执行,每项成本是自定时间单位。每帧有固定预算,能装下队头就继续;下一项装不下则留到下一帧。如果空帧的第一项本身超过预算,允许它独占一帧并记录超额。
每帧预算10 任务零到十三的成本[10, 8, 9, 9, 7, 2, 9, 4, 5, 5, 7, 6, 15, 2]
逐项算出过程
第1帧执行任务[0],成本10,剩余预算0,超额0;下一队头1。
第2帧执行任务[1],成本8,剩余预算2,超额0;下一队头2。
第3帧执行任务[2],成本9,剩余预算1,超额0;下一队头3。
第4帧执行任务[3],成本9,剩余预算1,超额0;下一队头4。
第5帧执行任务[4, 5],成本9,剩余预算1,超额0;下一队头6。
第6帧执行任务[6],成本9,剩余预算1,超额0;下一队头7。
第7帧执行任务[7, 8],成本9,剩余预算1,超额0;下一队头9。
第8帧执行任务[9],成本5,剩余预算5,超额0;下一队头10。
第9帧执行任务[10],成本7,剩余预算3,超额0;下一队头11。
第10帧执行任务[11],成本6,剩余预算4,超额0;下一队头12。
第11帧执行任务[12],成本15,剩余预算0,超额5;下一队头13。
第12帧执行任务[13],成本2,剩余预算8,超额0;下一队头为空。
全部任务分到12帧;任务总成本98,分帧后不会凭空减少。超大任务明确记录为超额,不能当作符合预算的一帧。
复核时看什么
逐帧检查任务顺序、累计成本和剩余预算。普通帧结束时若仍有任务,下一项必须确实装不下;超额帧只能包含一个超大任务。最终每项恰好执行一次,不能悄悄跳过难处理的队头。
练习时可以先遮住结果,沿用相同输入独立记录中间状态,再逐项比较。发现不同后先定位最早分歧,确认边界包含方式、编号起点、更新顺序以及是否提前取整。最后结果一致也不表示每个中间步骤都正确,因此保留过程记录有助于看清原因。
适用范围
这些成本是假定已知的模型量,并非对实际设备的耗时承诺。真实任务成本会波动,且帧内还有渲染、输入等工作。遇到经常超额的大任务,更合理的改进通常是继续拆分或改变执行方式。
