- 假设我可以购买 X 代币的容量。当我购买代币时,我一次购买它们三个月。
- 一项工作可以要求一个或多个令牌(通常最多 16 个)。
- 一项工作可能需要很长时间才能完成(几天),也可能需要很短的时间(几分钟)。
- 在开始使用之前,我必须购买一定数量 (X) 的代币。
- 有些工作比其他工作更重要,即应该优先考虑一些工作以快速完成。
- 我想随时使用尽可能少的令牌。这样我就可以购买更少的代币并省钱。
- 可以暂停和恢复作业。暂停作业时,令牌可用于其他作业。
- 用户创建工作,并选择优先级。该算法将选择何时运行哪些作业。
- *可能有更多的快速完成工作比长时间完成工作。
- *需要很长时间才能完成的工作可能会被给予较低的优先级。
(*这些规则可能有例外)
我需要制作一个调度系统,使 X 尽可能小。
一个(非常小的)例子:
作业 A 花费 4 个代币并且具有低优先级,并且需要 5 天完成。作业 B 花费 2 个代币并具有高优先级,需要 1 天才能完成。作业 C 花费 2 个代币并具有高优先级,需要 2 天才能完成。
作业 A 在作业 B 之前启动,作业 B 在作业 C 之前启动。
解决方案:暂停作业 A,让 B 和 C 运行。B 将首先完成,C 第二。然后恢复 A 并让它完成。
使用的令牌总数:4。
与我们一次运行所有作业(这将花费 8 个令牌)相比,这将花费 50%。
我应该如何制作这个调度程序/优先级?