2011-08-16 57 views
5

我有一個調度問題,其中新任務(執行順序連接的任務集)每隔幾秒鐘左右到達一次。
每個作業都需要一些資源以已知的時間間隔進行分配。
例如:
工作j1是一組一個我們的已知調度模式預留資源{r1, r2, r3} 任務:調度算法

r1:[t0 .. t1=t0+td1], 
r2:[t2=t1+td2+i2 .. t3=t2+td3] 
  • T0被執行的開始時間
  • TD1是長度r1的資源分配
  • t1是r1的資源分配的結束時間
  • i1是r1,r2等之間的等待類型。

schedule example
在這個例子中,一個新的作業J2被安排J1開始執行後的權利。 j2最早的開始時間是t1。 工作可能需要幾分鐘的時間執行,其中大部分工作是由等待組成的。

我有一個調度程序,它查看當前的預訂表,並確定哪個是具有固定分配時間和等待期的新工作的最早可能開始時刻,並相應地進行預留。 (但實際上,等待期並不需要固定 - 但在一定的百分比內(可能爲5%),並且可能有其他資源使用方式,例如,如果資源r3.1被預訂,那麼可以使用3.2來達到同樣的目的)。

但是,如果需要調度程序(是的,建議)能夠在新作業到達時動態調整所有的調度分配以最大化通過利用等待時間不必完全按照給定的條件以及與某些重複複製(3.1/3.2)並行執行的可能性這樣的事實完成所有工作(在一天中),那麼我會看到一個完全不同的調度方案(比我目前儘快啓動的方法)。

  1. 那麼你會調用什麼調度方案呢?
  2. 關於解決(新)問題的任何建議?

回答

1

至於你關於「替代資源使用情況」的問題:

最常見的實現來解決這一類的問題的模式是Object Pool Pattern
對此最廣爲人知的例子可能是ThreadPool

我建議你用int GetResource(ResourceType type, int durationInSeconds)方法實現ResourcePool類。 返回值指示給定ResourceType的下一個資源何時可用