厦门火炬高新区软件园创新大厦A区#102M jinnian@www.j9.com

新闻动态

游戏规则观察课:轮流加工任务的时间片与完成顺序——时间片2下的五项加工(练习09)

2026-10-28

让任务轮流使用加工时间,可以避免长任务一直占着工作位。它可能改变完成顺序,也会让单个任务经过多次暂停与继续;读懂剩余工作量比只看总时间更清楚。

下面使用独立的一组输入,逐步记录规则如何产生结果。建议先自行推演,再寻找与记录第一次不同的位置;检查时间单位、端点归属和处理顺序。所有约定均限定在本例中,其他作品采用不同实现并不自动意味着出错。

本例约定与输入

所有任务在起点已就绪,按初始编号排队;每次最多处理一个时间片,未完成者放到队尾,完成者离开。切换无额外耗时,没有新任务加入,也不设置优先级。

五任务初始需求[9, 11, 3, 9, 3],每次最多处理2 队列初始为0、1、2、3、4

过程与结果

从0到2处理任务0共2单位,剩余工作[7, 11, 3, 9, 3],随后队列[1, 2, 3, 4, 0];本任务回到队尾等待。

从2到4处理任务1共2单位,剩余工作[7, 9, 3, 9, 3],随后队列[2, 3, 4, 0, 1];本任务回到队尾等待。

从4到6处理任务2共2单位,剩余工作[7, 9, 1, 9, 3],随后队列[3, 4, 0, 1, 2];本任务回到队尾等待。

从6到8处理任务3共2单位,剩余工作[7, 9, 1, 7, 3],随后队列[4, 0, 1, 2, 3];本任务回到队尾等待。

从8到10处理任务4共2单位,剩余工作[7, 9, 1, 7, 1],随后队列[0, 1, 2, 3, 4];本任务回到队尾等待。

从10到12处理任务0共2单位,剩余工作[5, 9, 1, 7, 1],随后队列[1, 2, 3, 4, 0];本任务回到队尾等待。

从12到14处理任务1共2单位,剩余工作[5, 7, 1, 7, 1],随后队列[2, 3, 4, 0, 1];本任务回到队尾等待。

从14到15处理任务2共1单位,剩余工作[5, 7, 0, 7, 1],随后队列[3, 4, 0, 1];本任务完成。

从15到17处理任务3共2单位,剩余工作[5, 7, 0, 5, 1],随后队列[4, 0, 1, 3];本任务回到队尾等待。

从17到18处理任务4共1单位,剩余工作[5, 7, 0, 5, 0],随后队列[0, 1, 3];本任务完成。

从18到20处理任务0共2单位,剩余工作[3, 7, 0, 5, 0],随后队列[1, 3, 0];本任务回到队尾等待。

从20到22处理任务1共2单位,剩余工作[3, 5, 0, 5, 0],随后队列[3, 0, 1];本任务回到队尾等待。

从22到24处理任务3共2单位,剩余工作[3, 5, 0, 3, 0],随后队列[0, 1, 3];本任务回到队尾等待。

从24到26处理任务0共2单位,剩余工作[1, 5, 0, 3, 0],随后队列[1, 3, 0];本任务回到队尾等待。

从26到28处理任务1共2单位,剩余工作[1, 3, 0, 3, 0],随后队列[3, 0, 1];本任务回到队尾等待。

从28到30处理任务3共2单位,剩余工作[1, 3, 0, 1, 0],随后队列[0, 1, 3];本任务回到队尾等待。

从30到31处理任务0共1单位,剩余工作[0, 3, 0, 1, 0],随后队列[1, 3];本任务完成。

从31到33处理任务1共2单位,剩余工作[0, 1, 0, 1, 0],随后队列[3, 1];本任务回到队尾等待。

从33到34处理任务3共1单位,剩余工作[0, 1, 0, 0, 0],随后队列[1];本任务完成。

从34到35处理任务1共1单位,剩余工作[0, 0, 0, 0, 0],随后队列[];本任务完成。

总耗时35,等于初始总需求35;完成顺序[2, 4, 0, 3, 1]。

如何独立复核

逐时间单位模拟当前任务和队列,与按时间片一次扣减的结果比较。总工作时间应等于初始需求之和,每项剩余量不能为负,完成记录只能出现一次。

现实实现可能有切换开销或任务到达时间,这些都会改变完成时刻。本例把它们设为零或统一起点,是为了单独观察轮换策略,不能据此直接断言它比所有其他排队规则更快。

测试时保留原始数据与中间状态,再只改变一个条件作比较。先检查空状态、相等边界、重复输入和最后一步,再比较整体结果;不要为了让最后的数字相同而跳过前面已经出现的差异。明确规则后,复核才有可以重复的依据。