调度算法

PLa*_*ane 5 algorithm scheduling

我有一个调度问题,其中新的作业(按顺序连接执行的任务集)每隔几秒左右到达.
每项工作都需要以已知的时间间隔分配一些资源.
例如:
Job j1是一组任务,我们{r1, r2, r3} 在已知的调度模式上保留资源:

r1:[t0 .. t1=t0+td1], 
r2:[t2=t1+td2+i2 .. t3=t2+td3]
Run Code Online (Sandbox Code Playgroud)
  • t0是执行的开始时间
  • td1是r1的资源分配长度
  • t1是r1资源分配的结束时间
  • i1是r1,r2之间等待的perioid的长度,依此类推.

安排例子
在该示例中,正在j1执行开始之后立即调度新作业j2.j2的最早开始时间是t1.一份工作可能需要几分钟的执行时间,其中大部分都是等待.

我有一个调度程序查看当前的预订表,并决定哪个是具有固定分配时间和等待期的新作业的最早可能的起始时刻,并相应地进行预订.

(但实际上,等待期并不需要固定 - 但在一定百分比(可能是5%)内并且可能有资源使用的替代方案,例如,如果资源r3.1被预订,那么3.2可能是用来实现同样的目的.)

但是,如果需要调度程序(是的,已建议)能够在新作业到达时动态调整所有计划分配,以通过利用等待时间的事实最大化完成的总工作量(在一天内)不需要完全给定和并行执行与一些resrouce重复(3.1/3.2)的可能性,然后我会看一个完全不同的调度方案(比我目前的尽快开始即时方法).

  1. 那你会调用什么调度方案呢?
  2. 关于解决(新)问题的任何建议?

yas*_*891 1

至于您关于“资源使用替代方案”的问题:

解决此类问题最常实现的模式是对象池模式。
最广为人知的示例可能是线程池

我建议你ResourcePool用方法来实现一个类int GetResource(ResourceType type, int durationInSeconds)。返回值指示给定的下一个资源何时ResourceType可用